【问题标题】:Easiest way to extract fields from JSON从 JSON 中提取字段的最简单方法
【发布时间】:2013-02-23 10:03:17
【问题描述】:

更新:我应该马上提到这一点:我首先考虑了一个 Java/JSON 映射框架,但我的经理不希望我向项目添加更多依赖项,所以这是作为一种选择。 JSON-Java jar 已经在我们的类路径中,所以我可以使用它,但仍然无法通过树木看到森林如何使用它。

我的 Java 程序正在收到以下格式的 JSON(尽管值会一直变化):

{"order":{"booze":"1","handled":"0","credits":"0.6",
    "execute":0,"available":["299258"],"approved":[],
    "blizzard":"143030","reviewable":["930932","283982","782821"],
    "units":"6","pending":["298233","329449"],"hobbit":"blasphemy"}}

我正在寻找最简单、高效、可靠的方法,从这个 JSON 字符串中挑选特定值并将它们聚合到 List<Long> 中。

具体来说,我希望提取并聚合所有“ids”,即您看到的availableapproved、@ 的所有数值987654327@ 和 pending 字段。这些字段中的每一个都是一个由 0+“ids”组成的数组。因此,在上面的示例中,我们看到了以下 id 细分:

  • available: 有 1 个 id (299258)
  • approved: 有 0 个 id
  • reviewable: 有 3 个 id (930932, 283982, 782821)
  • pending: 有 2 个 id (298233, 329449)

我需要一些 Java 代码来运行并生成一个 List<Long>,其中包含所有 6 个提取的 id,没有特定的顺序。 id 只需要进入列表即可。

这感觉像是一个极其复杂、令人费解的正则表达式,我什至不确定从哪里开始。非常感谢任何帮助。提前致谢。

【问题讨论】:

标签: java regex json


【解决方案1】:

IMO 最简单的方法是使用 json 库,例如 gsonjacksonjson.org 等,将 de JSON 解析为一个对象,并使用您需要的属性值创建一个新的 List<Long>

带有 gson 的伪代码:

class Order {
   long[] available;
   long[] approved;
   ...
}

Order order = gson.fromJson("{ your json goes here }", Order.class);

List<Long> result = new ArrayList<Long>();
result.add(order.getAvailable());
result.add(order.getApproved());
...

带有 json.org/java 的伪代码:

JSONObject myobject = new JSONObject("{ your json goes here"});
JSONObject order = myobject.getJSONObject("order");

List<Long> result = new ArrayList<Long>();
for (int i=0; i<order.getJSONArray("approved").length(); i++) {
    Long value = order.getJSONArray("approved").getLong(i);
    result.add(value);
}
...

【讨论】:

  • 感谢@Guido Garcia (+1) - 请查看我的更新,但不幸的是,我不可能使用映射框架。
  • 我刚刚添加了一个示例,其中包含您在类路径中已有的库。
猜你喜欢
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 2017-03-06
  • 2018-07-09
相关资源
最近更新 更多