sgamer
sgamer

Reputation: 65

Extracting all values from nested JSON

I am fairly new to JSON parser and I am trying to extract all data set from "sizes" tag i.e extracting values (small, yes, xsmall, NO, Medium and yes) from the JSON file in a complex nested loop but doesn't work. I am using GSON to parse the JSON file and using JAVA as programming language

Here how the JSON file looks like in general

{ response: "ok",
  prodinfo: {
    sizes: [ 
      { size:"small", 
        available: "yes"
      }, 
      { size:"xsmall", 
        available: "No"
      },
      { size:"Medium", 
        available: "yes"
      }
    ]
  }
}

This is what i did

int array = jsonParser14.parse(json14).getAsJsonObject().get("ProdInfo").getAsJsonObject().getAsJsonArray("sizes").size();
JsonArray sizes = (JsonArray) jsonParser15.parse(json15).getAsJsonObject().get("ProdInfo").getAsJsonObject().getAsJsonArray("sizes");
for (int i = 0; i <= array; i++) {
    String size = sizes.get(i).getAsString();
    System.out.println("data extracted are: " + size);
}

Your help will be appreciated. Thanks

Upvotes: 0

Views: 1700

Answers (2)

Denys S&#233;guret
Denys S&#233;guret

Reputation: 382160

I usually treat this by making a public class with required fields :

public class ProdSize {
    public String size;
    public String available;
}

public class ProdInfo {
    public ProdSize[] sizes;
}

public class Message {
    public String response;
    public ProdInfo prodinfo;
}

And then I just have to do this in gson :

Gson gson = new GsonBuilder().create();
Message mess = gson.fromJson(theJsonString, Message.class);

Then, I don't have any loop to do to parse the JSON. I directly have my sizes in

mess.prodinfo.sizes

For example you can print them like this

for (int i=0; i<mess.prodinfo.sizes.length; i++) {
   ProdSize size = mess.prodinfo.sizes[i];
   System.out.println("Size " + size.size + " -> " + size.available);
}

Upvotes: 1

Jivings
Jivings

Reputation: 23250

Something like:

var sizes = json.prodinfo.sizes;
for (item in sizes) {
    if (sizes.hasOwnProperty(item)) {
        var isAvailable = sizes[item].available;
        alert(isAvailable);
    }

}​

Example here: http://jsfiddle.net/nG88B/3/

Edit: Looks like you need to parse the JSON first. In which case (if it's valid) you can do:

var obj = JSON.parse(jsonStr);

Upvotes: 0

Related Questions