Bra*_*son 2 python-3.x jmespath
我正在使用 jmespath 搜索一段 JSON,其中一个 JSON 键包含一个“@”符号。由于“@”符号是保留字符,因此 jmespath 会阻塞。我尝试了很多方法来逃避“@”符号,但没有成功。如何在 jmespath 搜索中转义“@”符号?
例子:
json = {"@name": "Bob", "address": "123 Main St"}
jmespath.search("@name", json)
Run Code Online (Sandbox Code Playgroud)
错误信息:
{ParseError} 意外标记:名称:第 1 列解析错误,标记“名称”(UNQUOTED_IDENTIFIER),用于表达式:“@name”^
我还为上述 jmespath 查询尝试了以下变体,但出现了相同的错误:
jmespath.search("!@name", json)
Run Code Online (Sandbox Code Playgroud)
jmespath.search("\@name", json)
Run Code Online (Sandbox Code Playgroud)
jmespath.search("`@`name", json)
Run Code Online (Sandbox Code Playgroud)
jmespath.search("\"@\"name", json)
Run Code Online (Sandbox Code Playgroud)
我找到了逃避它的正确方法:
jmespath.search("\"@name\"", json)
Run Code Online (Sandbox Code Playgroud)
根据我使用 JMESPath 的经验,对象的某些属性需要双引号,例如,如果我有一个 object {"0": "txt", "name": "txt2"},我可以使用此命令访问 name 值,@.name但对于一个0值,我需要在零周围加上双引号。我不能这样做@.0(它不起作用),但添加双引号有效@."0"。这可能就是 JMESPath 不允许双引号定义字符串的原因。因此,这与您在属性中放置某些特殊字符的情况相同。在Python中,查询已经是一个字符串,所以需要添加额外的引号并转义内部引号\"来解决这个问题。
在 JavaScript 中,您可以使用'"@name"'.
| 归档时间: |
|
| 查看次数: |
796 次 |
| 最近记录: |