如何在JsonPath

时间:2017-04-30 14:58:12

标签: json.net jsonpath

使用以下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时获取root对象。

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

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

似乎过滤仅用于数组,因此这是一个不受支持的功能。有人知道在Json.NET中这样做的方法,或者确认它不可能并且可能指向一个支持上述的库吗?

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

1 个答案:

答案 0 :(得分:1)

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