如何使用Jackson从JSON对象中获取数组中的值

5

简单来说,如何在Jackson中以非链式方式检索{"value1":123"}?

{
  "aaa": [
      {
        "value1": "123"
      }
  ],
  "bbb": [
      {
          "value2": "456"
      }
  ]
}

我尝试使用:jsonNode.at("/aaa[Array][0]),但是响应中缺少节点。

需要帮助。


1
使用 ObjectMapperObjectMapper objectMapper = new ObjectMapper(); Map<String,Map<String,Object>> map = objectMapper.readValue(json, Map.class); - Hadi J
2
可能是[使用Java(Jackson)读取JSON中嵌套键的值]的重复问题(https://dev59.com/MV0a5IYBdhLWcg3w3L8-),请查看此处的第一个答案。 - Gimhani
3个回答

8
正确的 JSON 路径表达式应该是 "/aaa/0/value1"。
使用方法:
jsonNode.at("/aaa/0/value1")

这个可以正常工作,但是节点之间的 /0/ 的功能是什么?我的子域不是第一个索引,但它仍然可以工作。 - Testilla
aaa 是一个 JSON 数组,因此必须跟随一个索引。 - S.K.

1
使用以下代码:
    JsonNode node = mapper.readTree(json);
    System.out.println(node.path("aaa").get(0)); // {"value1":"123"}
  1. 使用jackson-databind
  2. 使用此代码:

    node.path("aaa").get(0).get("value1") // 123。


1
使用 node.path("aaa").get(0) 可以获取数组中的第一个元素。任何其他想法,如 node.path("aaa[0]") 或 node.path("aaa/0") 都不起作用。

1
问题明确要求以“非链式方式”完成。虽然你所说的是正确的,而且你肯定可以那样做。但这超出了问题的范围。 - AlexT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接