你怎么逃脱jsonpath中的@符号?

时间:2016-05-13 23:17:44

标签: json jsonpath

给出一个像这样的json列表:

    {    
 "listRel:customFieldList": {
            "platformCore:customField": [
              {
                "@internalId": "801",
                "scriptId": "custentity_admin_contact_cweb",
                "@xsi:type": "platformCore:BooleanCustomFieldRef",
                "platformCore:value": "false"
              },
              {
                "@internalId": "712",
                "@scriptId": "custentity_bar_number",
                "@xsi:type": "platformCore:StringCustomFieldRef",
                "platformCore:value": "166493"
              },
              {
                "@internalId": "798",
                "@scriptId": "custentity_contact_type",
                "@xsi:type": "platformCore:SelectCustomFieldRef",
                "platformCore:value": {
                  "@internalId": "1",
                  "@typeId": "148",
                  "platformCore:name": "Attorney"
                }
              }
              ]
 }
}

如何选择“custentity_bar_number”中的值? 166493?

这会让你到达那里,但前提是你删除了JSON中@scriptId前面的@符号。

$..['platformCore:customField'][?(@['scriptId'] == 'custentity_bar_number')]

所以我需要的是一种逃避json中@符号的方法,并做出类似的工作:

$..['platformCore:customField'][?(@['@scriptId'] == 'custentity_bar_number')]

我正在使用http://jsonpath.com/来尝试完成这项工作。

2 个答案:

答案 0 :(得分:1)

您显然需要使用十六进制代码(我认为它与表达式的解析方式有关)

$..['platformCore:customField'][?(@['\x40scriptId'] == 'custentity_bar_number')]

答案 1 :(得分:1)

使用十六进制代码转义@ simbol对我不起作用。 这是我尝试过的样本。

这是json示例:

{
  "firstName": "John",
  "lastName" : "doe",
  "age"      : 26,
  "@address"  : {
    "streetAddress": "naist street",
    "city"         : "Nara",
    "postalCode"   : "630-0192"
  }
}

这些是我尝试过的jsonpath:

$.'\x40address'[*]
$."\x40address"[*]

http://jsonpath.com/

是我可以尝试使用的简单在线工具

关于我可能错过的事情,您有什么建议吗?