如何为jmespath搜索查询的字符串文字键内的'@'符号转义

时间:2019-09-11 21:33:28

标签: python-3.x jmespath

我正在使用jmespath搜索JSON代码段,并且其中一个JSON密钥包含一个'@'符号。由于“ @”符号是保留字符,因此jmespath会阻塞。我已经尝试了多种方法来成功地避开'@'符号。如何在jmespath搜索中转义'@'符号?

示例:

json = {"@name": "Bob", "address": "123 Main St"}

jmespath.search("@name", json)

错误消息:

  

{ParseError}意外令牌:名称:解析第1列的错误,令牌“名称”(UNQUOTED_IDENTIFIER),用于表达式:   “@名称”    ^

我还尝试了上述jmespath查询的以下变体,但有相同的错误:

jmespath.search("!@name", json)
jmespath.search("\@name", json)
jmespath.search("`@`name", json)
jmespath.search("\"@\"name", json)

1 个答案:

答案 0 :(得分:1)

我找到了逃避它的正确方法:

jmespath.search("\"@name\"", json)

根据我对JMESPath的经验,例如,需要对对象的某些属性加双引号,如果我有一个像这样的对象{"0": "txt", "name": "txt2"},则可以使用此命令@.name来获得名称值,但是我需要将双引号放在零上,我不能这样做@.0(它不起作用),但是使用双引号可以很好地工作@."0"。这可能是JMESPath不允许双引号定义字符串的原因。因此,与在属性中放置一些特殊字符的情况相同。因此,在python中,查询已经是一个字符串,因此有双引号,因此您需要在其他双引号中加上转义字符\"来解决此问题,而在javascript中,您可以这样做'"@name"'