java - 如何从 Json Tree 获取特定节点而不迭代整个列表

标签 java json jackson nodes

考虑以下 Json 结构:

{ "ubds": [
  {
    "id": "33",
    "metaData": {
      "lineInfo": {
        "poNumber": "PO_123",
        "poLineNumber": 1
      }
    },
    "confirmedDeliveryDate": "2016-05-26T16:15:51",
    "quantity": 99
  },
  {
    "id": "34",
    "metaData": {
      "lineInfo": {
        "poNumber": "PO_123",
        "poLineNumber": 2
      }
    },
    "confirmedDeliveryDate": "2016-05-26T16:15:51",
    "quantity": 99
  },
  {
    "id": "35",
    "metaData": {
      "lineInfo": {
        "poNumber": "PO_123",
        "poLineNumber": 3
      }
    },
    "confirmedDeliveryDate": "2016-05-26T16:15:51",
    "quantity": 99
  }]}

使用 JsonNode,有没有一种方法可以获取 poLineNumber 属性值为 3 的整个子节点 {id through amount},而无需迭代所有节点并返回匹配项?我需要为此使用 JsonPath 吗?

最佳答案

您可以查看JsonPath 。 您可以先使用ObjectMapper创建 Map<String, Object>从给定的 json 字符串中读取它并计算 JsonPath 表达式。例如:

ObjectMapper mapper = new ObjectMapper();
Map<String, Object> mappedObject = mapper.readValue(jsonString, Map.class);

// Evaluate that expression
Object result = JsonPath.read(mappedObject, "$.ubds[?(@.metaData.lineInfo.poLineNumber==3)]");

或者直接用JsonPath读取json字符串:

Object result = JsonPath.parse(jsonString).read("$.ubds[?(@.metaData.lineInfo.poLineNumber==3)]");

关于java - 如何从 Json Tree 获取特定节点而不迭代整个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38089420/

相关文章:

java - 设置文件权限总是返回 FALSE

java - 获取pdf中包含特定单词的页码

Java:使用花括号可以使代码更具可读性吗?

json - 将后端属性映射到前端属性

java - 如何使用 Jackson 解析具有可变对象名称的 JSON?

java - 使用 Robolectric 对 Toast 消息内容进行单元测试

angularjs - 将响应数据插入表中

javascript - 从键中获取 JSON 值

java - Jackson JSON、不可变类和接口(interface)

rest - 返回类型为标记接口(interface)时使用 Jackson 进行多态序列化