繁体   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