Reputation: 177
I just wanted to ask, how to simply parse nested JSON structure in Java that looks like this:
{
"goods":{
"NY Store":[
{
"product":"Teddybear",
"available":"20"
},
{
"product":"Mountain bike",
"available":"0"
}]
"LA Store":[
{
"product": ....and so on
I want to get all the products from all the stores, but the list is quite big (200 stores). Any tips and hints, please?
Upvotes: 0
Views: 4831
Reputation: 2
//import java.util.ArrayList;
//import org.bson.Document;
Document root = Document.parse("{\n"
+ " \"goods\":{\n"
+ " \"NY Store\":[\n"
+ " {\n"
+ " \"product\":\"Teddybear\",\n"
+ " \"available\":\"20\"\n"
+ " },\n"
+ " {\n"
+ " \"product\":\"Mountain bike\",\n"
+ " \"available\":\"0\"\n"
+ " }]}}");
System.out.println(((String) ((Document) ((ArrayList) ((Document) root.get("goods")).get("NY Store")).get(0)).get("product")));
System.out.println(((String) ((Document) ((ArrayList) ((Document) root.get("goods")).get("NY Store")).get(0)).get("available")));
System.out.println(((String) ((Document) ((ArrayList) ((Document) root.get("goods")).get("NY Store")).get(1)).get("product")));
System.out.println(((String) ((Document) ((ArrayList) ((Document) root.get("goods")).get("NY Store")).get(1)).get("available")));
Upvotes: 0
Reputation: 1
I found this google library very powerful for parsing nested objects in JSON.
List<String> products = JsonPath.read(json, "$.goods.NY Store[*].product");
This will return you a list of all products in each "NY Store" list.
Upvotes: 0
Reputation: 1036
This is a quick intro for your specific use case into the Jackson library.
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonSerialize;
public class JSONTest {
/**
* @param args
* @throws IOException
* @throws JsonMappingException
* @throws JsonGenerationException
*/
public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
HashMap<String, ArrayList<InventoryItem>> fs = new HashMap<String, ArrayList<InventoryItem>>();
for (int i = 0; i < 5; i++) {
ArrayList<InventoryItem> its = new ArrayList<InventoryItem>();
its.add(new InventoryItem("teddy", 20));
its.add(new InventoryItem("diny", 10));
fs.put(Long.toString(System.nanoTime()), its);
}
StoreContianer g = new StoreContianer(fs);
ObjectMapper objm = new ObjectMapper();
StringWriter sw = new StringWriter();
objm.writeValue(sw, g);
System.out.println(sw.toString());
StoreContianer c = objm.readValue(
"{\"goods\":{\"55278650620460\":[{\"product\":\"teddy\",\"available\":20},{\"product\":\"diny\",\"available\":10}],\"55278650631327\":[{\"product\":\"teddy\",\"available\":20},{\"product\":\"diny\",\"available\":10}],\"55278650628131\":[{\"product\":\"teddy\",\"available\":20},{\"product\":\"diny\",\"available\":10}],\"55278650582748\":[{\"product\":\"teddy\",\"available\":20},{\"product\":\"diny\",\"available\":10}],\"55278650624615\":[{\"product\":\"teddy\",\"available\":20},{\"product\":\"diny\",\"available\":10}]}}",
StoreContianer.class);
StringWriter sw2 = new StringWriter();
objm.writeValue(sw2, c);
System.out.println(sw2.toString());
}
}
@JsonSerialize
class StoreContianer {
private final HashMap<String, ArrayList<InventoryItem>> goods;
public StoreContianer(@JsonProperty("goods") HashMap<String, ArrayList<InventoryItem>> goods) {
this.goods = goods;
}
public HashMap<String, ArrayList<InventoryItem>> getGoods() {
return goods;
}
}
@JsonSerialize
class InventoryItem {
private final String product;
private final int available;
public InventoryItem(@JsonProperty("product") String product, @JsonProperty("available") int available) {
this.product = product;
this.available = available;
}
public String getProduct() {
return product;
}
public int getAvailable() {
return available;
}
}
Upvotes: 2
Reputation: 38432
why not use the library? http://www.json.org/java/
specifically,
public JSONObject(String source) throws JSONException {
this(new JSONTokener(source));
}
Upvotes: 1