簡體   English   中英

如何訪問JSONArray中的JSONObject中的JSONObject? Java /安卓

[英]How to access what appears to be JSONObject, in JSONObject, in a JSONArray? Java/Android

我有這個JSON文件,我想將其用於大學項目的移動應用程序,但是在訪問它的“字段”部分時遇到問題,我不確定訪問它的最佳方法。

{"total_hits":47287,"max_score":11.854574,
"hits":[
{"_index":"f762ef22-e660-434f-9071-a10ea6691c27",
"_type":"item",
"_id":"513fceb375b8dbbc21000022",
"_score":11.854574,

    "fields":{
    "item_id":"513fceb375b8dbbc21000022",
    "item_name":"Cheese, cheddar - 1 cup, diced",       
    "brand_name":"USDA",    
    "nf_calories":533.28,
    "nf_total_fat":43.97,
    "nf_cholesterol":130.68,
    "nf_sodium":861.96,
    "nf_serving_size_qty":1,
    "nf_serving_size_unit":"serving"}},

{"_index":"f762ef22-e660-434f-9071-a10ea6691c27",
"_type":"item",
"_id":"513fceb375b8dbbc21000021",
"_score":11.800501,

     "fields":{"item_id":"513fceb375b8dbbc21000021",
     "item_name":"Cheese, cheddar - 1 cup, melted",
     "brand_name":"USDA",
     "nf_calories":985.76,
     "nf_total_fat":81.28,
     "nf_cholesterol":241.56,
     "nf_sodium":1593.32,
     "nf_serving_size_qty":1,
     "nf_serving_size_unit":"serving"}}, ... etc.

我可以在第一部分中訪問_Score值,但是,我希望訪問諸如item_name和nf_calories之類的項,但是我不確定語法。 我相信我了解我需要做什么,但是我無法在腦海中將其形象化。

JSONObject parentObject = new JSONObject(finalJson);
JSONArray parentArray = parentObject.getJSONArray("hits");


            List<NutritionModel> nutModelList = new ArrayList<>();


            for(int i=0; i<parentArray.length(); i++) {

                hitsObject = parentArray.getJSONObject(i);
                NutritionModel nutModel = new NutritionModel();

                nutModel.set_score(hitsObject.getDouble("_score"));


                //Adding final object in the list
                nutModelList.add(nutModel);

這是我當前在ViewNutrition.java文件中所擁有的。

public class NutritionModel {

private Double _score;

public Array getFieldarray() {
    return fieldarray;
}

public void setFieldarray(Array fieldarray) {
    this.fieldarray = fieldarray;
}

private Array fieldarray;
private String item_name;
private Double nf_calories;
private Double nf_total_fat;
private Double nf_protein;
private Double nf_cholesterol;
private Double nf_sodium;
private Double nf_serving_size_qty;


public Double get_score() {
    return _score;
}

    public void set_score(Double _score) {
    this._score = _score;
}

    public String getItem_name() {
        return item_name;
    }

    public void setItem_name(String item_name) {
        this.item_name = item_name;
    }

    public Double getNf_calories() {
        return nf_calories;
    }

    public void setNf_calories(Double nf_calories) {
        this.nf_calories = nf_calories;
    }

    public Double getNf_total_fat() {
        return nf_total_fat;
    }

    public void setNf_total_fat(Double nf_total_fat) {
        this.nf_total_fat = nf_total_fat;
    }

    public Double getNf_protein() {
        return nf_protein;
    }

    public void setNf_protein(Double nf_protein) {
        this.nf_protein = nf_protein;
    }

    public Double getNf_cholesterol() {
        return nf_cholesterol;
    }

    public void setNf_cholesterol(Double nf_cholesterol) {
        this.nf_cholesterol = nf_cholesterol;
    }

    public Double getNf_sodium() {
        return nf_sodium;
    }

    public void setNf_sodium(Double nf_sodium) {
        this.nf_sodium = nf_sodium;
    }

    public Double getNf_serving_size_qty() {
        return nf_serving_size_qty;
    }

    public void setNf_serving_size_qty(Double nf_serving_size_qty) {
        this.nf_serving_size_qty = nf_serving_size_qty;
    }
}

這是我的自定義類中當前使用JSON數據的內容。

我嘗試過使用for語句遍歷JSONObject,搜索名為“ fields”的JSONObject,但是它仍然只返回空結果。 現在被困了幾天,真的很掙扎,任何幫助或指導將不勝感激! 謝謝。

Field對象不是數組,而是對象。 我建議您創建一個FieldModel類,並讓NutritionModel類包含FieldModel類的實例。

// In parser class
nutModel.setFields(hitsObject.getJSONObject("fields"));

// In NutritionModel class
public void setFields(JSONObject obj) {
  this.fields.item_name = obj.getString("item_name");
  // etc
}

為了訪問諸如item_name和nf_calories之類的項,需要訪問內部數組。 因此,該怎么做-

JSONObject parentObject = new JSONObject(finalJson);
JSONArray parentArray = parentObject.getJSONArray("hits");

假設您需要訪問索引i處“ hits”的元素(item_name等),然后需要轉到名為“ fields”的內部JSONObject,然后需要為此操作訪問名為“ item_name”的鍵-

for(int i=0;i<parentArray.length();i++) {
    JSONObject obj1=parentArray.getJSONObject(i);
    JSONObject obj2= obj1.getJSONObject("fields");
    String item_name=obj2.getString("item_name");
}

無論如何,即使您對解釋感到困惑,也可以通過以下網站獲得更好的JSON可視化效果: http://jsonviewer.stack.hu/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM