簡體   English   中英

在Android中解析JSON數組內的JSON數組

[英]Parsing JSON array inside json array in android

我像這種模式一樣從服務器獲取json。

[
   {
      "Response":[
         {
            "CategoryID":1,
            "CategoryName":"Software",
            "Count":1,
            "Tasks":[
               {
                  "ATId":17,
                  "TaskName":"Def",
                  "TaskId":17,
                  "TaskDetails":"FGH"
               }
            ]
         },
         {
            "CategoryID":2,
            "CategoryName":"Hardware",
            "Count":5,
            "Tasks":[
               {
                  "ATId":3,
                  "TaskName":"Def",
                  "TaskId":5,
                  "TaskDetails":"FGH"
               },
               {
                  "ATId":4,
                  "TaskName":"Def",
                  "TaskId":6,
                  "TaskDetails":"FGH"
               },
               {
                  "ATId":6,
                  "TaskName":"Def",
                  "TaskId":6,
                  "TaskDetails":"FGH"
               },
               {
                  "ATId":11,
                  "TaskName":"Def",
                  "TaskId":13,
                  "TaskDetails":"FGH"
               },
               {
                  "ATId":12,
                  "TaskName":"Def",
                  "TaskId":14,
                  "TaskDetails":"FGH"
               }
            ]
         },
         {
            "CategoryID":3,
            "CategoryName":"Web",
            "Count":1,
            "Tasks":[
               {
                  "ATId":13,
                  "TaskName":"Def",
                  "TaskId":11,
                  "TaskDetails":"FGH"
               }
            ]
         },
         {
            "CategoryID":4,
            "CategoryName":"Ios",
            "Count":3,
            "Tasks":[
               {
                  "ATId":5,
                  "TaskName":"Def",
                  "TaskId":7,
                  "TaskDetails":"FGH"
               },
               {
                  "ATId":8,
                  "TaskName":"Def",
                  "TaskId":7,
                  "TaskDetails":"FGH"
               },
               {
                  "ATId":15,
                  "TaskName":"Def",
                  "TaskId":15,
                  "TaskDetails":"FGH"
               }
            ]
         }
      ],
      "MessageStatus":"Success",
      "MessageCode":1
   }
]

在這里,我有一系列對象,其中也有內部對象。 所以我試圖做到這一點,並獲取了所有數據,但這不是我從服務器收到的形式。 我所需要的只是獲得一個我可以正確獲得的圖案。 我的Java代碼在這里。

@Override
public void onResponse(String response) {

    ParentItems entryObj = null;
    JSONObject jsonObj = null;
    JSONArray jsonArr = null;
    try {
        jsonArr = new JSONArray(response);
        //   JSONArray js=jsonObj.getJSONArray(response);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    String code = null;
    String Message = null;
    try {
        jsonObj = jsonArr.getJSONObject(0);
        code = jsonObj.optString("MessageCode");
        Message = jsonObj.optString("MessageStatus");
    } catch (JSONException e) {
        e.printStackTrace();
    }
    if (code.equals("1")) {
        try {
            Utilities.parentItemsList = new ArrayList < > ();
            Utilities.childItemsList = new ArrayList < > ();
            JSONArray array = jsonObj.getJSONArray("Response");


            for (int i = 0; i < array.length(); i++) {
                JSONObject entryJson = array.getJSONObject(i);
                entryObj = new ParentItems();
                entryObj.CategoryID = entryJson.getInt("CategoryID");
                entryObj.mName = entryJson.getString("CategoryName");
                entryObj.Count = entryJson.getInt("Count");
                Utilities.parentItemsList.add(entryObj);
                JSONArray taskArray = entryJson.optJSONArray("Tasks");

                for (int a = 0; a < taskArray.length(); a++) {
                    ChildItems childItems = new ChildItems();

                    childItems.ATId = entryJson.optInt("ATId");
                    childItems.TaskName = entryJson.optString("TaskName");
                    childItems.TaskId = entryJson.optInt("TaskId");
                    childItems.TaskDetails = entryJson.optString("TaskDetails");
                    Utilities.childItemsList.add(childItems);
                }

            }
        }

    } else {
        Toast.makeText(getContext(), "business ID is null", Toast.LENGTH_LONG).show();

    }
} catch (Exception e) {

    Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();

}

我需要將Catagory對象作為父項,而Task將作為子項的模式中的可擴展列表視圖中的show show數據

在您的ParentItems類中。 添加另一個這樣的屬性:

class ParentItems {
 ...Other attributes
 List<ChildItems> childItems;
}

然后在解析器中執行以下操作:

        for (int i = 0; i < array.length(); i++) {
            JSONObject entryJson = array.getJSONObject(i);
            entryObj = new ParentItems();
            entryObj.CategoryID = entryJson.getInt("CategoryID");
            entryObj.mName = entryJson.getString("CategoryName");
            entryObj.Count = entryJson.getInt("Count");
            entryObj.childItems = new ArrayList<>();
            JSONArray taskArray = entryJson.optJSONArray("Tasks");

            for (int a = 0; a < taskArray.length(); a++) {
                ChildItems childItems = new ChildItems();
                childItems.ATId = entryJson.optInt("ATId");
                childItems.TaskName = entryJson.optString("TaskName");
                childItems.TaskId = entryJson.optInt("TaskId");
                childItems.TaskDetails = entryJson.optString("TaskDetails");
                Utilities.childItemsList.add(childItems);
                entryObj.childItems.add(childItems);
            }
            Utilities.parentItemsList.add(entryObj);

        }

這樣,您將獲得所有子任務作為父對象的一部分。

PS。 對於這樣的任務,使用GSON之類的庫會更容易。

您必須像下面這樣制作兩個模型類。

public class ParentItems{
    String CategoryID;
        String CategoryName;
            String Count;
    ArrayList<ChildItems> ChildList;
    // Here Constuctor and Getter Setter
}

public class ChildItems{
        String ATId;
                String TaskName;
                String TaskId;
        String TaskDetails;
// Here Constuctor and Getter Setter
}

你必須像這樣添加數據

   for (int i = 0; i < array.length(); i++) {
            JSONObject entryJson = array.getJSONObject(i);
            entryObj = new ParentItems();
            entryObj.CategoryID = entryJson.getInt("CategoryID");
            entryObj.mName = entryJson.getString("CategoryName");
            entryObj.Count = entryJson.getInt("Count");
            Utilities.parentItemsList.add(entryObj);
            JSONArray taskArray = entryJson.optJSONArray("Tasks");

            if(taskArray.length()>0){

                     ArrayList<ChildItems> list=new ArrayList<>();

            for (int a = 0; a < taskArray.length(); a++) {
                ChildItems childItems = new ChildItems();

                childItems.ATId = entryJson.optInt("ATId");
                childItems.TaskName = entryJson.optString("TaskName");
                childItems.TaskId = entryJson.optInt("TaskId");
            childItems.TaskDetails = entryJson.optString("TaskDetails");
                list.add(childItems);
            }
            entryObj.setChildList(list);

}

        }

有關更多信息,請參見此鏈接可以為您提供幫助。 展開式Listview示例

暫無
暫無

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

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