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

时间:2013-03-07 23:52:00

标签: java regex 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>

具体来说,我希望提取并汇总所有“ ID ”,即您为available {{1}看到的所有数值}},approvedreviewable字段。这些字段中的每一个都是0+“id”的数组。因此,在上面的示例中,我们看到了以下的ID细分:

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

我需要一些Java代码来运行并生成一个pending,其中包含所有6个提取的ID,没有特定的顺序。 ID只需要将其列入列表。

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

1 个答案:

答案 0 :(得分:5)

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