首页 > 解决方案 > 键或值以@字符开头的JSONPath?

问题描述

我正在尝试基于包含 @ 符号的键获取值,但使用 JSONPath 失败。
原因:由于@是当前对象/元素,json不返回值。

样品 1:

{
  "firstName": "John",
  "lastName" : "doe",
  "phoneNumbers": [
    {
      "type"  : "iPhone",
      "number": "0123-4567-8888"
    },
    {
      "type"  : "home",
      "number": "0123-4567-8910"
    }
  ]
}

这有效:$.phoneNumbers[1].type
这有效:$.phoneNumbers[?(@.type=="iPhone")].type

样品2:

{
  "firstName": "John",
  "lastName" : "doe",
  "phoneNumbers": [
    {
      "@type"  : "iPhone",
      "number": "0123-4567-8888"
    },
    {
      "@type"  : "home",
      "number": "0123-4567-8910"
    }
  ]
}

这行得通:$.phoneNumbers[1].type
这行不通: $.phoneNumbers[?(@.@type=="iPhone")].type

对于处理包含@字符的键和值有什么建议吗?

标签: jsonjsonpath

解决方案


这取决于您使用的是哪个 jsonpath 实现。
如果您使用的是JsonPath-Plus,那么您可以尝试以下操作:

$.phoneNumbers[?(@['@type'] == "iPhone")]

您可以在此处在线评估基于JsonPath-Plus.


推荐阅读