键中的点时的 JSONPath 语法

Hay*_*ley 10 json jsonpath

如果我使用了不正确的术语,请原谅我,我是新手。

我有一些简单的 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']
  • ETC。


Kot*_*mit 8

有一个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'

我见过的一些示例/解决方案使用带括号的单引号,但对我不起作用。


tri*_*cot 4

此问题于 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 的过时版本,对于预览当前库为您提供的内容来说并不可靠。