Java 如何使用流api在JSONArray中查询基于off-of-key的值
我有一个json数组,其中json对象具有元素id和值。类似于:Java 如何使用流api在JSONArray中查询基于off-of-key的值,java,json,java-stream,Java,Json,Java Stream,我有一个json数组,其中json对象具有元素id和值。类似于: [ { "id": "123", "value": "test", }, { "id": "223", "value": "test12", } ] 我需要查询JSONArray并找到id=123的值 我尝试了流api,但它给了我未处理的异常:org.JSOn.JSonException” JSONArray jsonRespon
[
{
"id": "123",
"value": "test",
},
{
"id": "223",
"value": "test12",
}
]
我需要查询JSONArray并找到id=123的值
我尝试了流api,但它给了我未处理的异常:org.JSOn.JSonException”
JSONArray jsonResponse = new JSONArray(response.asString());
List<JSONObject> jsonItems = IntStream.range(0, jsonResponse.length()).mapToObj(index -> (JSONObject) jsonResponse.get(index)).collect(Collectors.toList());
jsonItems.forEach(arrayElm -> arrayElm.get("id").equals("123"));
它在“jsonResponse.getindex”和“arrayElm.getid”处给出JSOnexception。简单的解决方案是创建一个与Json字符串对应的对象。使用Jackson框架将Json字符串转换为对象。每个对象都有id、value和其他参数等字段。最后,您将获得对象的数组。现在迭代每个对象并检查以获得所需的值,或者也可以使用Java8Lambda来查找所需的值。此外,如果您想为json字符串创建一个对象,请遵循以下链接
也许jsonResponse.length应该是jsonResponse.length-1?jsonResponse的大小是2,但我认为索引是1。只有在我能够消除json异常的情况下,这段代码才能工作-IntStream.range0,jsonResponse.length.MapToObjectJSONObject.class::cast.filtero->o.getid.equals123.findFirst;Json异常显示为编译错误,不允许我运行代码最终能够抑制Json异常,但现在缺少返回类型错误:JSONObject jsonItem=IntStream.range0,jsonResponse.length-1.MapToObject JSONObject.class::cast.filtero->{try{return o.getid.equals123;}catch JSONException e{e.printStackTrace;}}}.findFirst;