如何在 jmespath 搜索查询的字符串文字键中转义“@”符号
How do I escape the '@' symbol inside a string literal key for a jmespath search query
我正在使用 jmespath 搜索 JSON 的片段,其中一个 JSON 键包含一个“@”符号。由于“@”符号是保留字符,jmespath 会阻塞。我尝试了很多方法来成功转义“@”符号。如何在我的 jmespath 搜索中转义“@”符号?
示例:
json = {"@name": "Bob", "address": "123 Main St"}
jmespath.search("@name", json)
错误信息:
{ParseError} Unexpected token: name: Parse error at column 1, token "name" (UNQUOTED_IDENTIFIER), for expression:
"@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
但对于 0
值,我需要在零周围加上双引号。我不能这样做 @.0
(它不起作用),但是添加双引号可以 @."0"
。这可能就是 JMESPath 不允许双引号定义字符串的原因。所以这与您在属性中放置某些特殊字符的情况相同。在Python中,query已经是一个字符串,所以需要额外加引号,转义内引号\"
来解决这个问题。
在JavaScript中,您可以使用'"@name"'
获得相同的结果。
我正在使用 jmespath 搜索 JSON 的片段,其中一个 JSON 键包含一个“@”符号。由于“@”符号是保留字符,jmespath 会阻塞。我尝试了很多方法来成功转义“@”符号。如何在我的 jmespath 搜索中转义“@”符号?
示例:
json = {"@name": "Bob", "address": "123 Main St"}
jmespath.search("@name", json)
错误信息:
{ParseError} Unexpected token: name: Parse error at column 1, token "name" (UNQUOTED_IDENTIFIER), for expression: "@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
但对于 0
值,我需要在零周围加上双引号。我不能这样做 @.0
(它不起作用),但是添加双引号可以 @."0"
。这可能就是 JMESPath 不允许双引号定义字符串的原因。所以这与您在属性中放置某些特殊字符的情况相同。在Python中,query已经是一个字符串,所以需要额外加引号,转义内引号\"
来解决这个问题。
在JavaScript中,您可以使用'"@name"'
获得相同的结果。