从嵌套的JSON中提取所有值

时间:2012-05-22 15:39:21

标签: java json gson

我是JSON解析器的新手,我试图从“sizes”标签中提取所有数据集,即在复杂的嵌套循环中从JSON文件中提取值(小,是,xsmall,NO,Medium和yes)但是不起作用。我使用GSON解析JSON文件并使用JAVA作为编程语言

这里JSON文件的外观如何

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

这就是我做的

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);
}

我们将不胜感激。 感谢

2 个答案:

答案 0 :(得分:1)

我通常通过创建一个包含必填字段的公共类来对待它:

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

public class ProdInfo {
    public ProdSize[] sizes;
}

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

然后我只需要在gson中执行此操作:

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

然后,我没有任何循环来解析JSON。我直接把我的尺寸放在

mess.prodinfo.sizes

例如,您可以像这样打印它们

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

答案 1 :(得分:0)

类似的东西:

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

}​

此处示例:http://jsfiddle.net/nG88B/3/

修改: 看起来你需要先解析JSON。在这种情况下(如果它有效)你可以这样做:

var obj = JSON.parse(jsonStr);