android - 无法在 JsonArray 中解析 JsonArray

标签 android json parsing

您好,我正在尝试在另一个 json 数组中解析一个 json 数组。帮我解决这个问题。

我的 Json 数组是

   "results":[  
  {  
     "percentcompleted":0,
     "requirers":[  
        {  
           "activityContext":null,
           "auditReason":null,
           "assignee":{  
              "sourceType":"InternalPerson",
              "activitySourceType":{  
                 "listId":"sysli000000000003037",
                 "sourceType":0,
                 "key":"0",
                 "displayName":"Person"
              },
              "locale":{  
                 "id":"local000000000000001",
                 "displayName":"English"
              },
              "id":"emplo000000006156648",
              "displayName":"Venkat Rao"
           },
           "targetDate":null,
           "assignment":{  
              "id":"stcur000000000003182",
              "displayName":null
           },
           "learningEvent":{  
              "id":"curra000000000003001",
              "displayName":"Studieplan_test för OKQ8"
           },
           "jobTypeId":null,
           "listIds":null,
           "assignedOn":1502084325000,
           "source":{  
              "sourceType":"InternalPerson",
              "activitySourceType":{  
                 "listId":"sysli000000000003037",
                 "sourceType":0,
                 "key":"0",
                 "displayName":"Person"
              },
              "locale":{  
                 "id":"local000000000000001",
                 "displayName":"English"
              },
              "id":"emplo000000006156648",
              "displayName":"Venkat Rao"
           },
           "required":true,
           "actions":null,
           "id":"currh000000000014343"
        }
     ],
     "basicdetail":{  
        "revokedOn":null,
        "need_recert":false,
        "curriculum":{  
           "id":"curra000000000003001",
           "displayName":"Studieplan_test för OKQ8"
        },
        "recert_window_starts_on":null,
        "createdBy":"vrao",
        "updatedBy":"vrao",
        "createdOn":1502084325000,
        "updatedOn":1508357353000,
        "status":{  
           "intStatus":400,
           "description":"Assigned",
           "displayName":"Assigned"
        },
        "type":"CURRICULUM",
        "path":{  
           "id":"track000000000003081",
           "displayName":"Studieplan"
        },
        "acquiredOn":null,
        "assignee":{  
           "sourceType":"InternalPerson",
           "activitySourceType":{  
              "listId":"sysli000000000003037",
              "sourceType":0,
              "key":"0",
              "displayName":"Person"
           },
           "locale":{  
              "id":"local000000000000001",
              "displayName":"English"
           },
           "id":"emplo000000006156648",
           "displayName":"Venkat Rao"
        },
        "targetDate":null,
        "startedOn":null,
        "assignedOnDate":1502084325000,
        "heldCertNo":"00003787",
        "owner":{  
           "sourceType":"InternalPerson",
           "activitySourceType":{  
              "listId":"sysli000000000003037",
              "sourceType":0,
              "key":"0",
              "displayName":"Person"
           },
           "locale":{  
              "id":"local000000000000001",
              "displayName":"English"
           },
           "id":"emplo000000006156648",
           "displayName":"Venkat Rao"
        },
        "id":"stcur000000000003182",
        "assigneeAdditionalDetails":{  
           "person_no":"VRAO",
           "username":"VRAO"
        }
     },
     "isgranted":null
  },

我解析上述数据的代码是

public class CurriculaParser {
public ArrayList<CurriculaData> getData(String response)
{
    ArrayList<CurriculaData> dataList = new ArrayList<>();
    try {
        JSONObject mainObj = new JSONObject(response);
        JSONArray array = mainObj.getJSONArray("results");
        CurriculaData data;
        for(int i = 0;i<array.length();i++)
        {
            data = new CurriculaData();
            JSONObject resObj = array.getJSONObject(i);
            JSONArray reqArray = resObj.getJSONArray("requires");
            for( int j =0;j<reqArray.length();j++) {
                JSONObject reqObj = reqArray.getJSONObject(j);
                JSONObject innerObj = reqObj.getJSONObject("learningEvent");
                data.setTitle(innerObj.getString("displayName"));
                data.setAssignedOn(reqObj.getString("assignedOn"));

            }
            JSONArray basicDetailArray = resObj.getJSONArray("basicdetail");
            for(int k=0;k<basicDetailArray.length();k++) {
                JSONObject basicDetailObj = basicDetailArray.getJSONObject(k);
                JSONObject statusObj = basicDetailObj.getJSONObject("status");
                data.setStatus(statusObj.getString("displayName"));
                data.setAcquiredOn(basicDetailObj.getString("acquiredOn"));
                JSONObject assignObj = basicDetailObj.getJSONObject("assignee");
                data.setAssignedBy(assignObj.getString("displayName"));
            }
            dataList.add(data);


        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return dataList;
}

最后我得到了这样的错误

org.json.JSONException: 没有 requires 的值

让我知道我犯的错误,我是处理另一个 jsonarray 中的 jsonarray 的初学者

最佳答案

org.json.JSONException: No value for requires

JSONException

  • KEY 查找不匹配

您应该传递 requirers 而不是 requires

  JSONArray reqArray = resObj.getJSONArray("requirers");

关于android - 无法在 JsonArray 中解析 JsonArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47551798/

相关文章:

parsing - 为什么递归下降解析器不能处理左递归

c++ - 解析字符串,其中 "separator"可以作为数据的一部分?

javascript - 如何使用 div 数据创建 JSON 数组

android - 使用 Android 导航组件的深层链接打开不正确的屏幕

Android 屏幕方向行为

android - Gradle 模块和 git 子模块

javascript - 如何使用 firefox OS 发出 Ajax 请求和响应?

php - Json_Encode php 最后一个逗号

java - 将字符串解析为带前导零的长

java - 无法在 Android 上使用 XOAUTH 连接到 Gmail IMAP