繁体   English   中英

从JSON提取字段的最简单方法

[英]Easiest way to extract fields from JSON

更新:我应该立即提到这一点:我首先考虑了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 ,可reviewablepending字段中看到的所有数值。 这些字段中的每一个都是一个0+“ ids”的数组。 因此,在上面的示例中,我们看到以下ID细分:

  • available :有1个ID(299258)
  • approved :具有0个ID
  • reviewable复核:具有3个ID(930932、283982、782821)
  • pending :有2个ID(298233,329449)

我需要一些Java代码来运行并产生具有所有这6个提取的id的List<Long>并且没有特定的顺序。 这些ID只需要进入列表即可。

感觉就像一个令人难以置信的复杂正则表达式,我什至不知道从哪里开始。 非常感谢任何帮助。 提前致谢。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM