【问题标题】:Extracting all values from nested JSON从嵌套的 JSON 中提取所有值
【发布时间】:2012-05-22 15:39:20
【问题描述】:

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

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

【问题讨论】:

  • 您是否构建了存储这些数据的类?如果是这样,您不需要循环。有很多方法可以做到这一点,向我们展示你的尝试。
  • 大家好。我刚刚添加了我已经完成的 GSON 解析器和循环。任何想法将不胜感激。

标签: java json gson


【解决方案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);
}

【讨论】:

  • 你好,dystroy。感谢您的回复,但是我无法从您的想法中提取每个字段的大小。可以告诉我你是怎么做到的吗?现在,当我在代码下方运行时,我得到的输出为 "[Lgsonparser$ProdSize;@787171" JsonParser jsonParser = new JsonParser(); FileReader json = new FileReader("h:\\test.json"); JsonElement theJsonString = jsonParser.parse(json); Gson gson = new GsonBuilder().create();消息混乱 = gson.fromJson(theJsonString, Message.class); System.out.println(mess.prodinfo.sizes); } } }
  • 我用一个循环完成了我的答案,以展示如何迭代。
  • 非常感谢。真的很感激
【解决方案2】:

类似:

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

【讨论】:

  • OP 正在尝试使用 gson 在 java 中进行解析。
猜你喜欢
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 2015-07-24
  • 2021-08-26
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2018-03-07
相关资源
最近更新 更多