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

Java 从JSON中提取字段的最简单方法,java,regex,json,Java,Regex,Json,更新:我应该马上提到这一点:我首先考虑了一个Java/JSON映射框架,但我的经理不希望我向项目添加更多依赖项,因此这是一个选项。jar已经在我们的类路径上了,所以我可以使用它,但是仍然没有看到如何使用它的森林 我的Java程序正在被传递以下形式的JSON(尽管值会一直更改): 我正在寻找一种最简单、高效、可靠的方法,从这个JSON字符串中挑选特定的值,并将它们聚合到一个列表中 具体地说,我希望提取并聚合所有“ID”,即您看到的可用的、已批准的、可查看的和待处理的字段的所有数值。这些字段中的每一

更新:我应该马上提到这一点:我首先考虑了一个Java/JSON映射框架,但我的经理不希望我向项目添加更多依赖项,因此这是一个选项。jar已经在我们的类路径上了,所以我可以使用它,但是仍然没有看到如何使用它的森林

我的Java程序正在被传递以下形式的JSON(尽管值会一直更改):

我正在寻找一种最简单、高效、可靠的方法,从这个JSON字符串中挑选特定的值,并将它们聚合到一个
列表中

具体地说,我希望提取并聚合所有“ID”,即您看到的
可用的
已批准的
可查看的
待处理的
字段的所有数值。这些字段中的每一个都是0+个“id”的数组。因此,在上面的示例中,我们看到以下ID的细分:

  • 可用
    :有1个id(299258)
  • 已批准
    :具有0个ID
  • 可查看
    :有3个ID(930932283982782821)
  • 挂起
    :有2个ID(298233329449)
我需要一些Java代码来运行并生成一个包含所有6个提取ID的
列表
,没有特定顺序。ID只需要进入列表


这感觉像是一个难以置信的复杂,复杂的正则表达式,我甚至不知道从哪里开始。非常感谢您的帮助。提前感谢。

IMO最简单的方法是使用json库,如、等,将de json解析为一个对象,并使用所需属性的值创建一个新的
列表

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());
...
类顺序{
长[]可用;
长[]批准;
...
}
Order-Order=gson.fromJson(“{您的json在这里}”,Order.class);
列表结果=新建ArrayList();
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);
}
...
JSONObject myobject=newjsonobject(“{您的json在这里”});
JSONObject order=myobject.getJSONObject(“order”);
列表结果=新建ArrayList();

对于(int i=0;iRegex?为什么不解析JSON?谢谢-请查看我的UpdateAnks@Guido Garcia(+1)-请查看我的更新,但不幸的是,使用映射框架对我来说是不可能的。我刚刚添加了一个示例,其中包含类路径中已有的库。
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);
}
...