【问题标题】:How to filter a non-array in JsonPath如何在 JsonPath 中过滤非数组
【发布时间】:2017-04-30 14:58:12
【问题描述】:

使用以下 JSON(来自 http://jsonpath.com):

{
  "firstName": "John",
  "lastName" : "doe",
  "age"      : 26,
  "address"  : {
    "streetAddress": "naist street",
    "city"         : "Nara",
    "postalCode"   : "630-0192"
  },
  "phoneNumbers": [
    {
      "type"  : "iPhone",
      "number": "0123-4567-8888"
    },
    {
      "type"  : "home",
      "number": "0123-4567-8910"
    }
  ]
}

只有当 firstName 是 John 时,我才想获取根对象。

我已经尝试过这些输入和许多其他类似的输入:

  • $.[?($.firstName == 'John')]
  • $.[?($.'firstName' == 'John')]
  • $.[?(@.firstName == 'John')]
  • $[?($.firstName == "John")]

似乎过滤仅适用于数组,因此这是一个不受支持的功能。有人知道在 Json.NET 中执行此操作的方法,或者确认这是不可能的,也许可以将我指向支持上述内容的库?

我使用的是 F#,但这并不重要,因为 F# 与 C#、.NET 和 NuGet 包兼容。

【问题讨论】:

标签: json.net jsonpath


【解决方案1】:

JSON 路径旨在定位 JSON 对象中的数据,而不是对该数据执行某些处理或测试。过滤器符号用于标识数组中的项目,目的是返回该数据或其中的一部分。在数组中包含对象意味着可能有许多具有相同名称的属性必须通过其他方式过滤才能选择它们的子集。
在对象属性上使用过滤器表示法不是一回事。对象中只能有一个具有特定名称的属性,因此说明该名称足以唯一标识它。您可以通过获取 $.firstName 然后单独测试值“John”来轻松实现所需的效果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多