【问题标题】:Android json parsing object inside another object and arrayAndroid json在另一个对象和数组中解析对象
【发布时间】:2015-06-10 17:24:28
【问题描述】:

我想在另一个 json 对象中解析来自这个 json 对象的所有“name”和“desc”。我需要另一个“for”吗?

 {
  "main": {
    "details": [
      {
        "owner_name": "owner_name1",
        "id": "id1",
        "details2": {
          "data": [
            {
              "name": "name1",
              "desc": "my desc1",

            },
            {
              "name": "name2",
              "desc": "my desc2",

            }
          ],

        }
      },
      {
        "owner_name": "owner_name2",
        "id": "id2",
        "details2": {
          "data": [
            {
              "name": "name3",
              "desc": "my desc3",

            },
            {
              "name": "name4",
              "desc": "my desc4",

            }
          ]
        }
      }
    ]
  }
}

我的java代码是:

JSONObject jsono = new JSONObject(data);
JSONObject mainObject = jsono.getJSONObject("main");
JSONArray jsonArray = mainObject.getJSONArray("details");

for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject object1 = jsonArray.getJSONObject(i);

     JSONObject objectDetails2 = object1.getJSONObject("details2");
     JSONArray jsonArrayData = objectDetails2.getJSONArray("data");

   for (int j = 0; j < jsonArrayData.length(); j++) {
         JSONObject object = jsonArrayData.getJSONObject(j);   
         Actors actor = new Actors();
    actor.setName(object.getString("name"));
    actor.setDesc(object.getString("desc"));


    actorsList.add(actor);

      }

它只在 details2 中显示第一个“数据”结果,而不在数据中显示第二个 details2。 现在我的结果是:“name1,dmy desc1,name2,my desc2”

我想要所有结果,例如:“name1,dmy desc1,name2,my desc2,name3,my desc3,name4,my desc4”

【问题讨论】:

    标签: android json


    【解决方案1】:

    我认为你应该像这样进入“details2”JSON 对象:

    JSONArray jsonArrayData=object.getJSONObject("details2").getJSONArray("data");
    

    【讨论】:

      【解决方案2】:

      我怎样才能再次进入对象和数组?我需要“姓名”的详细信息 和“描述”

      object JSONObject 中获取details2,然后获取data JSONArray:

       for (int i = 0; i < jsonArray.length(); i++) {
              JSONObject object = jsonArray.getJSONObject(i);
               // get details2 JSONObject
               if(object.has("details2")){
                 if(!object.isNUll("details2")){
                  JSONObject objectDetails2 = object.getJSONObject("details2");
                  // get data JSONArray from objectDetails2
                  if(objectDetails2.has("data")){
                    if(!objectDetails2.isNUll("data")){
                      JSONArray jsonArrayData = objectDetails2.getJSONArray("data");
                       // iterate to jsonArrayData 
                       for (int j = 0; j < jsonArrayData.length(); j++) {
                          JSONObject objectInner = jsonArray.getJSONObject(j);
                          String strName=objectInner.optString("name");
                          ....  
                        }
              }else{
                       // details2 found but null
                      }
                  }else{
                  // details2 not found
                  }
               }else{
                 // details2 found but null
              }
             }else{
                 // details2 not found
             }
      }
      

      【讨论】:

      • @Mullinsangebn: 调试你的代码在读取第一个对象后出现中断
      • 是的,一个数组没有 details2 和 data.. 但下一个有它......我该如何解决它?
      • @Mullinsangebn: ok 使用isNullhas 方法检查is JSONObject or JSONArray contain details2 or data 如果包含则解析其他方式移动到下一个
      【解决方案3】:

      您必须先获取对象,然后解析它以获取不同的名称和信息

      JSONArray jsonArrayData;
        for (int i = 0; i < jsonArray.length(); i++) {
          JSONObject object = jsonArray.getJSONObject("details");
          jsonArrayData=object.getJSONArray("data");
          for(int k=0;k<jsonArrayData.length();k++)
            {
          Actors actor = new Actors();
          actor.setName(object.getString("name"));
          actor.setDesc(object.getString("desc"));        
          actorsList.add(actor);
         }
       }
      

      我会建议你使用 GSON,它使用起来非常简单,

      【讨论】:

        猜你喜欢
        • 2015-04-28
        • 2016-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-09
        • 1970-01-01
        • 1970-01-01
        • 2011-08-04
        相关资源
        最近更新 更多