如果我使用了不正确的术语,请原谅我,我是新手。
我有一些简单的 JSON:
{
"properties": {
"footer.navigationLinks": {
"group": "layout"
, "default": [
{
"text": "Link a"
, "href": "#"
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我试图查明“footer.navigationLinks”,但我在键名中遇到点问题。我正在使用http://jsonpath.com/并且当我输入时
$.properties['footer.navigationLinks']
Run Code Online (Sandbox Code Playgroud)
我得到“不匹配”。如果我将键更改为“footernavigationLinks”,它会起作用,但我无法控制 JSON 文件中的键名。
请有人帮我定位那个键名吗?
San*_*ssi 11
有关信息,自从提出问题以来,jsonpath.com已被修补,现在它适用于问题中给出的示例。我成功地尝试了这些路径:
$.properties['footer.navigationLinks']$.properties.[footer.navigationLinks]$.properties.['footer.navigationLinks']$['properties']['footer.navigationLinks']$.['properties'].['footer.navigationLinks']properties.['footer.navigationLinks']有一个json响应:
{
"0": {
"SKU": "somevalue",
"Merchant.Id": 234
}
}
Run Code Online (Sandbox Code Playgroud)
我可以用 . (点)在名称中。
jsonPath.getJsonObject("0.\"Merchant.Id\"")
Run Code Online (Sandbox Code Playgroud)
注意:引号和它们被转义的事实。
注意不确定其他版本,但我正在使用
'com.jayway.restassured',名称:'json-path',版本:'2.9.0'
我见过的一些示例/解决方案使用带括号的单引号,但对我不起作用。
此问题于 2007 年被报告为问题 #4 - 成员名称包含点失败并已修复。
此在线jsonpath.com 实现中不存在该修复,但它已在这个旧存档中修复,并且可能在此后创建的大多数分支中(例如此处和此处)。
将有问题的代码与 2007 年修正的代码版本进行比较,发现修正是在私有normalize函数中进行的。
在 2007 年更正的版本中,内容如下:
normalize: function(expr) {
var subx = [];
return expr.replace(/[\['](\??\(.*?\))[\]']|\['(.*?)'\]/g, function($0,$1,$2){
return "[#"+(subx.push($1||$2)-1)+"]";
}) /* http://code.google.com/p/jsonpath/issues/detail?id=4 */
.replace(/'?\.'?|\['?/g, ";")
.replace(/;;;|;;/g, ";..;")
.replace(/;$|'?\]|'$/g, "")
.replace(/#([0-9]+)/g, function($0,$1){
return subx[$1];
});
},
Run Code Online (Sandbox Code Playgroud)
该序列中的第一个和最后replace一个确保第二个replace不会将属性名称中的点解释为属性分隔符。
我查看了从那时起制作的更新版本,代码从那时起已经发生了巨大的变化。
jsonpath.com基于 JSONPath 的过时版本,对于预览当前库为您提供的内容来说并不可靠。