【问题标题】:JsonPath For multiple objectJsonPath 用于多个对象
【发布时间】:2020-11-30 00:44:29
【问题描述】:

我想知道从下面的 json 数据中购买物品“abc”和“def”的名字。 (预期结果是“tom”)

请告诉我如何使用 JsonPath。

[
  {
    "name": "tom",
    "purchased": [
      {
        "name": "abc"
      },
      {
        "name": "def"
      }
    ]
  },
  {
    "name": "bob",
    "purchased": [
      {
        "name": "xyz"
      }
    ]
  }
]

【问题讨论】:

  • 您能添加您尝试过的内容吗?这个社区通常喜欢看到某种程度的努力,而不是“为我解决问题”类型的问题。
  • 嗨。你正在使用哪个 JSONPath 实现,你在哪里使用这个?

标签: jsonpath


【解决方案1】:

如果您在 Java 中执行此操作,您可以像这样选择买家的姓名:

$..[?(@.purchased && @..name contains 'abc' && @..name contains 'def' )].name

在 JavaScript 中,您可以使用如下查询:

$.[?(@.purchased && @.purchased.some(e => e.name==='abc') && @.purchased.some(e => e.name==='def') )].name

两个查询都使用类似的方法:

  • 我们过滤purchased-property,然后使用函数在映射中的键中搜索某些值
    • Jayway 的 JsonPath 提供了一个 contains 函数来执行此操作;
    • 在 JavaScript 中,我们利用脚本评估 search the map/dict 来获取我们的键/值
      所以,.some() 不是 JsonPath 函数,而是 some 现代 JavaScript (:D)。
  • 这在这两种情况下都是一种解决方法,但它可以完成工作。

您可以在此处在线测试两者。选择选项卡 JayWay 并单击 Go 进行第一个查询,切换到选项卡 Goessner 以运行 JavaScript 示例(您也可以运行第二个 here)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-31
    • 2021-12-12
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    相关资源
    最近更新 更多