从 JSON 响应中读取时如何转义“@”?

How to escape "@" when reading from a JSON response?

假设我有以下示例 JSON 响应,我想从中提取“@type”的值:

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

验证使用:- http://jsonpath.com/

这适用于“数字”:

$.phoneNumbers.[number]

但无法获取“@type”的值:

$.phoneNumbers.[@type]

尝试了多种方法,但没有成功。

谢谢!

编辑:- 在数组中为“home”添加了另一个值,现在索引逻辑 [0,1] 不起作用。甚至尝试使用 [:] 获取所有值,但没有成功。

您可以阅读 this documentation:

Please note, that the return value of jsonPath is an array, which is also a valid JSON structure.

所以基本上它总是returns一个数组。

var phoneTypes = jsonPath(json,"$.phoneNumbers.[@type]"); 

结果

["iPhone","home"]

如果你想要一个 phone 你必须使用 phoneTypes[0] for iPhone

但我强烈建议您使用此代码修复您的 json

var fixedJson=  JSON.parse(JSON.stringify(json).replaceAll("\"@type\"","\"type\"" ));

在这种情况下你可以使用真正的搜索

var homePhone = jsonPath(fixedJson,"$.phoneNumbers[?(@.type =='home')]")[0].number;

输出

0123-4567-8910