如果我使用不正确的术语,请原谅我,我是新手。
我有一些简单的JSON:
{
"properties": {
"footer.navigationLinks": {
"group": "layout"
, "default": [
{
"text": "Link a"
, "href": "#"
}
]
}
}
我正在尝试查明“footer.navigationLinks”,但我在密钥名称中遇到问题。我正在使用http://jsonpath.com/,当我进入
时$.properties['footer.navigationLinks']
我得到'不匹配'。如果我将密钥更改为“footernavigationLinks”,它可以工作,但我无法控制JSON文件中的密钥名称。
请有人帮我定位该关键名称吗?
答案 0 :(得分:1)
此问题在2007年报告为issue #4 - Member names containing dot fail并已修复。
此在线jsonpath.com implementation中的修复程序不,但它已在this old archive中修复,可能在此后创建的大多数分支中已修复(如{{{{ 3}}和here)。
对错误和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];
});
},
该序列中的第一个和最后一个replace
确保第二个replace
不会将属性名称中的某个点解释为属性分隔符。
我查看了自那时以来制作的更新的叉子,并且代码自那时起发生了巨大的变化。
here基于过时的JSONPath版本,对于预览当前库将为您提供的内容不可靠。
答案 1 :(得分:1)
有一个json回复:
{
"0": {
"SKU": "somevalue",
"Merchant.Id": 234
}
}
我可以用一个键来定位一个键。 (点)在名称中。
jsonPath.getJsonObject("0.\"Merchant.Id\"")
注意:引号及其转义的事实。
注意不确定其他版本,但我正在使用
'com.jayway.restassured',名称:'json-path',版本:'2.9.0'
我见过的一些样本/解决方案,使用带括号的单引号,但对我不起作用。
答案 2 :(得分:0)
有关信息,jsonpath.com已自提出问题以来进行了修补,现在适用于问题中给出的示例。我成功尝试了这些路径:
$.properties['footer.navigationLinks']
$.properties.[footer.navigationLinks]
$.properties.['footer.navigationLinks']
$['properties']['footer.navigationLinks']
$.['properties'].['footer.navigationLinks']
properties.['footer.navigationLinks']