User3
User3

Reputation: 2535

Not able to parse JSON Array properly

I am getting the following as a String response from a webserveice:

[
    [
        {
            "dgtype": "adhoc",
            "subtypename": "Person",
            "subtypedesc": "null",
            "summary": "Junaid (Self)",
            "subtype": "person",
            "birthdate": "1995-1-23 ",
            "name": "Junaid (Self)"
        },
        {
            "dgtype": "adhoc",
            "subtypename": "Job",
            "subtypedesc": "null",
            "summary": "Exa",
            "subtype": "person",
            "birthdate": "2010-01-30",
            "name": "Junaid (Self)"
        }
    ]
]

In Java I am trying to do the following:

JSONArray jArray = new JSONArray(result);  

                System.out.println("Response: "+jArray);

                for(int i = 0; i<= jArray.length(); i++){
                    try {
                        JSONObject oneObject = jArray.getJSONObject(i);

                        String dgtype = oneObject.getString("dgtype");
                        String subtypename = oneObject.getString("subtypename");
                        String subtypedesc = oneObject.getString("subtypedesc");
                        String summary = oneObject.getString("summary");
                        String subtype = oneObject.getString("subtype");
                        String birthdate = oneObject.getString("birthdate");
                        String name = oneObject.getString("name");

                        System.out.println(i);
                        System.out.println("dgtype: "+dgtype);
                        System.out.println("subtypename: "+subtypename);
                        System.out.println("subtypedesc: "+subtypedesc);
                        System.out.println("summary: "+summary);
                        System.out.println("subtype: "+subtype);
                        System.out.println("birthdate: "+birthdate);
                        System.out.println("name: "+name);




                    } catch (JSONException e) {
                        System.out.println("JSON Exception: "+e);
                    } 
                }

However I am getting the following exception:

JSON Exception: org.json.JSONException: Value  
[
    {
        "dgtype": "adhoc",
        "subtypename": "Person",
        "subtypedesc": "null",
        "summary": "Junaid (Self)",
        "subtype": "person",
        "birthdate": "1995-1-23 ",
        "name": "Junaid (Self)"
    },
    {
        "dgtype": "adhoc",
        "subtypename": "Job",
        "subtypedesc": "null",
        "summary": "Exa",
        "subtype": "person",
        "birthdate": "2010-01-30",
        "name": "Junaid (Self)"
    }
]
at 0 of type org.json.JSONArray cannot be converted to JSONObject
JSON Exception: org.json.JSONException: Index 1 out of range [0..1)

I am following this example. Where am I going wrong? Also notice the missing long brackets in the exception snippet.

Upvotes: 1

Views: 174

Answers (4)

Autocrab
Autocrab

Reputation: 3747

              for(int i = 0; i<= jArray.length(); i++){
                  final JSONArray innerArray = jArray.getJSONArray(i);
                  for (int a = 0; a < innerArray.length(); a++) { 
                     try {
                        final JSONObject oneObject = innerArray.getJSONObject(i);    
                        String dgtype = oneObject.getString("dgtype");
                        String subtypename = oneObject.getString("subtypename");
                        String subtypedesc = oneObject.getString("subtypedesc");
                        String summary = oneObject.getString("summary");
                        String subtype = oneObject.getString("subtype");
                        String birthdate = oneObject.getString("birthdate");
                        String name = oneObject.getString("name");

                        System.out.println(i);
                        System.out.println("dgtype: "+dgtype);
                        System.out.println("subtypename: "+subtypename);
                        System.out.println("subtypedesc: "+subtypedesc);
                        System.out.println("summary: "+summary);
                        System.out.println("subtype: "+subtype);
                        System.out.println("birthdate: "+birthdate);
                        System.out.println("name: "+name);
                    } catch (JSONException e) {
                        System.out.println("JSON Exception: "+e);
                    } 
                }
             }

Upvotes: 0

Darpan
Darpan

Reputation: 5795

As it says, 'JSONArray cannot be converted to JSONObject', You have an array in another array, so

JSONArray jArray1 = new JSONArray(result);  

then

JSONArray jArray =  jArray1.getJSONArray(0);

Now it will work.

Upvotes: 1

ρяσѕρєя K
ρяσѕρєя K

Reputation: 132972

jArray JSONArray contain another JSONArray which contain JSONObeject so first get JSONArray and then get all JSONObject from it:

        JSONArray oneArray = jArray.getJSONArray(i);
        for(int j = 0; j<= oneArray.length(); j++){
          JSONObject oneObject = oneArray.getJSONObject(j);
          // get dgtype,subtypename,subtypedesc,.. from oneObject
        }

Upvotes: 1

user468311
user468311

Reputation:

You have two arrays, one is within another:

[
   [
    //Your objects
   ]
]

You could either change data format so it only has one array, or modify your code:

JSONArray outer = new JSONArray(result);  
JSONArray jArray = outer.getJSONArray(0);

Upvotes: 5

Related Questions