1

Hi i was trying to parse a json array inside another json array. Help me with this.

my Json Array is

   "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
  },

and my Code to parse the above data is

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;
}

and finally i got error like

org.json.JSONException: No value for requires

let me know the error what i made and iam a beginner in dealing with jsonarray inside another jsonarray

2
  • JSON invalid. post proper json Commented Nov 29, 2017 at 11:33
  • invalid json format check here jsonlint.com Commented Nov 29, 2017 at 11:33

2 Answers 2

1

org.json.JSONException: No value for requires

JSONException

  • KEY mismatches on lookups

You should pass requirers instead of requires.

  JSONArray reqArray = resObj.getJSONArray("requirers");
Sign up to request clarification or add additional context in comments.

Comments

1

fixed the requires TYPO error

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.