-1

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

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

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

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

4

1 回答 1

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);
}
...
于 2013-03-07T23:55:35.377 回答