更新:我应该立即提到这一点:我首先考虑了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}看到的所有数值}},approved
和reviewable
字段。这些字段中的每一个都是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只需要将其列入列表。
这感觉就像一个非常复杂,复杂的正则表达式,我甚至不知道从哪里开始。任何帮助都非常感谢。提前谢谢。
答案 0 :(得分: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());
...
使用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);
}
...