0

Here i want to fetch the data from the json, but i am getting only first two objects value (25, 44) but the ids are 50,60 . I don't know whats wrong with this code.

Below is my response from the server:

{
"product": {
    "25": {
        "training": "First Name",
        "taken": null,
        "date": "1386737285",
        "body":"http://abc.xyz.in/video1.mp4",
        "image": "http://abc.xyz.in/video1.jpg"
    },
    "44": {
        "training": "Second Name",
        "taken": null,
        "date": "1389951618",
        "body":"http://abc.xyz.in/video2.mp4",
        "image":"http://abc.xyz.in/video2.jpg"
    },
    "50": {
        "training": "Third Name",
        "taken": null,
        "date": "1389971004",
        "body":"http://abc.xyz.in/video3.mp4",
        "image": "http://abc.xyz.in/video3.jpg"
    },
    "60": {
        "training": "Fourth Name",
        "taken": null,
        "date": "1390003200",
        "body": "http://abc.xyz.in/video4.mp4",
        "image": "http://abc.xyz.in/video4.jpg"
    }
  }
}

Here is the code for fetching data from json:

 public String[] getDataFromResponse(String jsonProfileResponse,String secondParam,
        String attributeName ) {

    String[] attributeValue = null;
    try {
        json = new JSONTokener(jsonProfileResponse).nextValue();
        if (json instanceof JSONObject) {
            JSONObject jsonObject = (JSONObject) json;
            JSONObject jObj = jsonObject.getJSONObject(secondParam);
            System.out.println(jObj);
            Iterator<?> keys = jObj.keys();
            List<String> listitems = new ArrayList<String>();
            List<String> nids = new ArrayList<String>();
            while (keys.hasNext()) {
                nids.add(String.valueOf(keys.next()));
                JSONObject jsonObj = jObj.getJSONObject(String.valueOf(keys
                        .next()));
                System.out.println(jsonObj);
                listitems.add(jsonObj.getString(attributeName));
            }
            attributeValue = listitems.toArray(new String[0]);
                trainingId = nids.toArray(new String[0]);
        }

    } catch (JSONException ex) {
        ex.printStackTrace();
    }
    return attributeValue;

}

Thanks for the considering...

Mohan
  • 311
  • 8
  • 15
user3154663
  • 291
  • 1
  • 2
  • 18
  • Have you considered using Jackson or GSON for automatically creating java objects from json? It would cost a bit of performance (just a bit, really), but you will do that all in one or thwo lines of code. – user1685095 Jan 28 '14 at 08:17
  • Tell me how to do that?? @user1685095 – user3154663 Jan 28 '14 at 08:19
  • Well, the tutorial are on their site. But here is one http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/ Basically you would need to create java object with corresponding fields for every field in json. And then you would get such object from json for free, without need of parsing it by hand. – user1685095 Jan 28 '14 at 09:06

3 Answers3

3

Inside the hasNext you call twice keys.next()

So, instead of

  nids.add(String.valueOf(keys.next()));
  JSONObject jsonObj = jObj.getJSONObject(String.valueOf(keys.next()));

you have to do

  String currentKey = String.valueOf(keys.next());
  nids.add(currentKey);
  JSONObject jsonObj = jObj.getJSONObject(currentKey);
Alessio
  • 2,018
  • 25
  • 26
  • How can i store the keys @alessio – user3154663 Jan 28 '14 at 08:17
  • where do you need to store the key? your code is ok except from this two lines. I should use GSON instead of doing it manually BTW, it's very simple and you can avoid this kind of problems. Check here https://code.google.com/p/google-gson/ – Alessio Jan 28 '14 at 08:20
  • @Alession Please give me a small example to get the values by above response by using GSON. – user3154663 Jan 28 '14 at 08:24
  • the official documentation is the fastest way to learn how to do it, trust me, in 10 minutes you'll have your code up and running with gson ;) https://sites.google.com/site/gson/gson-user-guide. In a minute: you define a class that represent your json data, you call the "fromJson(String json,Class yourClass)" method, and gson will create an instance of yourClass parsing the json – Alessio Jan 28 '14 at 08:25
1
String key="";
while (keys.hasNext()) {
   key= keys.next()
   JSONObject jsonObj = jObj.getJSONObject(String.valueOf(key));
   nids.add(key));
   System.out.println(jsonObj);
   listitems.add(jsonObj.getString(attributeName));
}

use of key.next() twice is problem

Darshan Patel
  • 3,176
  • 6
  • 26
  • 49
0

because in JSONObject, the order of the keys is undefined.

@see: http://developer.android.com/reference/org/json/JSONObject.html#keys%28%29

try to sort your data on server, then response it in JSONArray