【问题标题】:Unable to parse JsonArray inside JsonArray无法解析 JsonArray 中的 JsonArray
【发布时间】:2017-11-29 11:31:27
【问题描述】:

您好,我试图在另一个 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: 要求没有值

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

【问题讨论】:

  • JSON 无效。发布正确的 json
  • 无效的json格式检查这里jsonlint.com

标签: android json parsing


【解决方案1】:

org.json.JSONException: 要求没有值

JSONException

  • KEY 查找不匹配

您应该传递 requirers 而不是 requires

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

【讨论】:

    【解决方案2】:

    修复了需要的 TYPO 错误

    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("requirers");
            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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      • 2021-07-25
      相关资源
      最近更新 更多