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

IAm*_*aja -1 java regex json

更新:我应该立即提到这一点:我首先考虑了Java/JSON映射框架,但我的经理不希望我向项目添加任何更多依赖项,因此这是一个选项.该JSON-Java的罐子已经在我们的类路径,这样我就可以使用,但仍然没有看到过的树木如何可以使用森林.

我的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"}}
Run Code Online (Sandbox Code Playgroud)

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

具体来说,我正在寻找,提取和聚集所有"的IDS ",即,所有你看到的数字值available,approved,reviewablepending领域.这些字段中的每一个都是0+"id"的数组.因此,在上面的示例中,我们看到了以下的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只需要将其列入列表即可.

这感觉就像一个非常复杂,复杂的正则表达式,我甚至不确定从哪里开始.任何帮助都非常感谢.提前致谢.

Gui*_*ido 5

IMO最简单的方法是使用json库,如gson,jackson,json.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());
...
Run Code Online (Sandbox Code Playgroud)

使用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);
}
...
Run Code Online (Sandbox Code Playgroud)