【问题标题】:How to get specific nodes from a Json Tree without iterating through the entire list如何在不遍历整个列表的情况下从 Json 树中获取特定节点
【发布时间】:2016-06-29 02:36:22
【问题描述】:

考虑以下 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 quantity},而无需遍历所有节点并返回匹配项?我需要为此使用 JsonPath 吗?

【问题讨论】:

  • 没有迭代你将如何找到“poLineNumber”:3
  • 当我搜索互联网时,除了迭代整个数组之外,我找不到其他方法。我想,别无他法。
  • Gayathri,假设我有 poLineNumber 值并且只想提取记录,就像我有给定 Map 的键列表并想要获取值一样。

标签: java json jackson nodes


【解决方案1】:

您可以查看JsonPath。 您可以首先使用 ObjectMapper 从给定的 json 字符串创建一个 Map<String, Object>,然后读取它并评估 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)]");

【讨论】:

  • JsonPath 是要走的路。谢谢!
猜你喜欢
  • 2016-01-07
  • 2022-11-26
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多