Python 3.x 我如何逃离'@';用于jmespath搜索查询的字符串文字键内的符号

Python 3.x 我如何逃离'@';用于jmespath搜索查询的字符串文字键内的符号,python-3.x,jmespath,Python 3.x,Jmespath,我正在使用jmespath搜索一段JSON,其中一个JSON键包含一个“@”符号。由于“@”符号是保留字符,jmespath将阻塞。我尝试了很多方法来避开“@”符号,但都没有成功。如何在jmespath搜索中转义“@”符号 例如: json={@name:“Bob”,“address:“123 Main St”} jmespath.search(“@name”,json) 错误消息: {ParseError}意外标记:名称:第1列的标记“name”(未加引号的_标识符)处出现解析错误,用于表达

我正在使用jmespath搜索一段JSON,其中一个JSON键包含一个“@”符号。由于“@”符号是保留字符,jmespath将阻塞。我尝试了很多方法来避开“@”符号,但都没有成功。如何在jmespath搜索中转义“@”符号

例如:

json={@name:“Bob”,“address:“123 Main St”}
jmespath.search(“@name”,json)
错误消息:

{ParseError}意外标记:名称:第1列的标记“name”(未加引号的_标识符)处出现解析错误,用于表达式: “@name” ^

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

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

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

jmespath.search(“\@name\”,json)
根据我使用JMESPath的经验,对象中的一些属性需要双引号,例如,如果我有一个对象
{“0”:“txt”,“name”:“txt2”}
,我可以使用这个命令
@.name
访问name值,但是对于
0
值,我需要在0周围加双引号。我不能这样做
@.0
(它不起作用),但添加双引号是有效的
@。“0”
。这可能就是JMESPath不允许双引号定义字符串的原因。这与在属性中放置某些特殊字符的情况相同。在Python中,查询已经是一个字符串,因此需要添加额外的引号并转义内部引号
\“
,以解决此问题

在JavaScript中,您可以使用
“@name”
获得相同的结果