0

我对 JSON 解析器相当陌生,我正在尝试从“大小”标签中提取所有数据集,即在复杂的嵌套循环中从 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);
}

您的帮助将不胜感激。谢谢

4

2 回答 2

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);
}
于 2012-05-22T15:56:21.940 回答
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);
于 2012-05-22T15:51:03.153 回答