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