-5

I would need help to parse this JSONArray in my Android app. I'm a bit confused with JSONObjects and JSONArrays :

[
{
    "nid": [
        {
            "value": "3"
        }
    ],

    "uid": [
        {
            "target_id": "1",
            "url": "/user/1"
        }
    ],

    "field_image": [
        {
            "target_id": "2",
            "alt": "alternate 1",
            "title": "",
            "width": "640",
            "height": "640",
            "url": "http://url"
        },
        {
            "target_id": "3",
            "alt": "alternate 2",
            "title": "",
            "width": "640",
            "height": "640",
            "url": "http://url"
        }
    ]
}]

Here is what I've got to start the iteration :

public void onResponse(JSONArray response) {
try {
    jsonResponse = "";
    for (int i = 0; i < response.length(); i++) {       
    ...
Vincent Roye
  • 2,751
  • 7
  • 33
  • 53
  • Just use org.json package. It has methods which allow you to directly parse the json without having to explicitly write this kind of loop logic. – SoulRayder Apr 20 '16 at 05:01
  • what data you need to get from json?? third one Array? – Vishal Thakkar Apr 20 '16 at 05:03
  • I suggest you to use GSON for JSON parsing. – RBK Apr 20 '16 at 05:03
  • 2
    Possible duplicate of [Difference between JSONObject and JSONArray](http://stackoverflow.com/questions/12289844/difference-between-jsonobject-and-jsonarray) – Iamat8 Apr 20 '16 at 05:13
  • @RBK, yes I tried but it's not formatted like a standard JSON object like : { "status": "ok", "count": 3, "count_total": 3, "pages": 1, "posts": [ { – Vincent Roye Apr 20 '16 at 08:15

6 Answers6

1

Here is your code to parse data,

private void parseData(){
        try {
            JSONArray jsonArray=new JSONArray(response);
            JSONObject jsonObject=jsonArray.getJSONObject(0);
            JSONArray jsonArrayNid=jsonObject.getJSONArray("nid");
            JSONArray jsonArrayUid=jsonObject.getJSONArray("uid");
            JSONArray jsonArrayField_image=jsonObject.getJSONArray("field_image");
            for(int i=0;i<jsonArrayNid.length();i++){
                JSONObject jsonObjectNid=jsonArrayNid.getJSONObject(i);
                String value=jsonObjectNid.getString("value"); //here you get your nid value
            }
            for(int i=0;i<jsonArrayUid.length();i++){
                JSONObject jsonObjectUid=jsonArrayUid.getJSONObject(i);
                String target_id=jsonObjectUid.getString("target_id"); //here you get your uid target_id value
                String url=jsonObjectUid.getString("url"); //here you get your uid url value
            }
            for(int i=0;i<jsonArrayField_image.length();i++){
                JSONObject jsonObjectFieldImage=jsonArrayField_image.getJSONObject(i);
                String target_id=jsonObjectFieldImage.getString("target_id");
                String alt=jsonObjectFieldImage.getString("alt");
                String title=jsonObjectFieldImage.getString("title");
                String width=jsonObjectFieldImage.getString("width");
                String height=jsonObjectFieldImage.getString("height");
                String url=jsonObjectFieldImage.getString("url");
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
Dhaval Solanki
  • 4,589
  • 1
  • 23
  • 39
1

Try to parse like this.

In this code, jsonArray is the parent array which you have in your JSON.

for(int i=0;i<jsonArray.length();i++)
{
    try {
             JSONObject object=jsonArray.getJSONObject(i);
             JSONArray imageArray=object.getJSONArray("field_image");
             for(int j=0;j<imageArray.length();j++)
             {
                 JSONObject imageObject=imageArray.getJSONObject(j);
                 String targetId=imageObject.getString("target_id");
             }
        } 
    catch (JSONException e) {
                e.printStackTrace();
            }
}
IAmInPLS
  • 4,051
  • 4
  • 24
  • 57
Vishal Thakkar
  • 2,117
  • 2
  • 16
  • 33
1
for (int i = 0; i < response.length(); i++) { 

 JSONObject tobject = response.getJSONObject(i);



  JSONArray nid = tobject.getJSONArray("nid");
  JSONArray uid= tobject.getJSONArray("uid");
  JSONArray field_image= tobject.getJSONArray("field_image");

  //similarly you can loop inner jsonarrays

}
UzUmAkI_NaRuTo
  • 565
  • 3
  • 8
  • 20
1

Use code according to you:

JSONArray array = null;
    try {
        array = new JSONArray(url); // your web url 
        JSONObject object = array.getJSONObject(0);
        JSONArray array1 = object.getJSONArray("nid");
        JSONObject object1 = array1.getJSONObject(0);
        String value = object1.getString("value");

        JSONArray array2 = object.getJSONArray("uid");
        JSONObject object2 = array2.getJSONObject(0);
        String target = object2.getString("target_id");
        String url = object2.getString("url");

        JSONArray array3 = object.getJSONArray("field_image");
        JSONObject object3 = array3.getJSONObject(0);
        String alt = object3.getString("alt");

        Toast.makeText(Testing.this,value+"\n"+target+"\n"+url+"\n"+alt,Toast.LENGTH_LONG).show();

    } catch (JSONException e) {
        e.printStackTrace();
    }
Chaudhary Amar
  • 836
  • 8
  • 20
1

Now :) if you have to parse something first look for some library:

http://www.java2s.com/Code/Jar/g/Downloadgson222jar.htm

Download gson.jar and then create java classes that mimic your desired json:

class C1{
   private String value;
}

class C2{
   private String target_id;
   private String url;
}

class C3{
   private String target_id;
   private String alt;
   private String title;
   private String width;
   private String height;
   private String url;
}

class c4{
   private List<C1> nid;
   private List<C2> uid;
   private List<C3> field_image;
}

Since you receive array from C4, you parse it like this:

public void onResponse(JSONArray response){
    String value = response.toString();
    GsonBuilder gb = new GsonBuilder();
    Type arrayType = new TypeToken<List<C4>>() {}.getType();
    List<C4> data = gb.create().fromJson(value, arrayType);
}

So in just 3 lines of code, you have your entire json serialized to java objects that you can use in your code.

Martin Y.
  • 671
  • 4
  • 5
0

Try

public void onResponse(JSONArray response) {
    try {
        if (response != null) {

            for (int i = 0; i < response.length(); i++) {

                JSONObject jsonObject = resultsArray.getAsJsonObject(i);

                //get nid array
                JSONArray nidJSONArray = jsonObject.getJSONArray("nid");

                //get uid array
                JSONArray uidJSONArray = jsonObject.getJSONArray("uid");

                //get field_image array
                JSONArray fieldImageJSONArray = jsonObject.getJSONArray("field_image");

                //parse nid array
                if (nidJSONArray != null) {
                    for (int i = 0; i < nidJSONArray.length(); i++) {
                        JSONObject jsonObject = nidJSONArray.getAsJsonObject(i);
                        String value = jsonObject.getString("value");
                    }
                }


                //parse uid array
                if (uidJSONArray != null) {
                    for (int i = 0; i < uidJSONArray.length(); i++) {
                        JSONObject jsonObject = uidJSONArray.getAsJsonObject(i);
                        String targetId = jsonObject.getString("target_id");
                        String url = jsonObject.getString("url");
                    }
                }


                //parse field_image array
                if (fieldImageJSONArray != null) {
                    for (int i = 0; i < fieldImageJSONArray.length(); i++) {
                        JSONObject jsonObject = fieldImageJSONArray.getAsJsonObject(i);
                        String targetId = jsonObject.getString("target_id");
                        String alt = jsonObject.getString("alt");
                        String title = jsonObject.getString("title");
                        String width = jsonObject.getString("width");
                        String height = jsonObject.getString("height");
                        String url = jsonObject.getString("url");
                    }
                }
            }
        }

    } catch(Exception e) {
        Log.e("Error", e.getMessage());
    }

}
PEHLAJ
  • 9,980
  • 9
  • 41
  • 53