从 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
假设我有以下示例 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