在Python中使用JMESPath查询键中有空格的JSON

83qze16e  于 2023-05-16  发布在  Python
关注(0)|答案(1)|浏览(136)

我有一个JSON,看起来像这样:

[
  {"First Name": "xyz", "Last Name": "abc", "Name": "name1"},
  {"First Name": "abc", "Last Name": "xyz", "Name": "name2"},
  {"First Name": "abcd", "Last Name": "wxyz", "Name": "name3"}
]

我能够轻松地提取其中没有空格的条目。例如:

[?Name=='name1']

其给出:

[
  { "First Name": "xyz", "Last Name": "abc", "Name": "name1" }
]

但是,我无法获得键中有空格的条目。例如:

  • [?First Name =='xyz']结果为Syntax error: expected Rbracket, got: UnquotedIdentifier
  • [?'First Name' =='xyz']结果为[]

我是不是漏掉了什么?
Python中使用的JMESPath版本:

>>> jmespath.__version__
'0.10.0'
wkftcu5l

wkftcu5l1#

查询中的key应该用引号括起来:

[?"First Name" == 'xyz']

这是因为单引号和双引号在JMESPath中的含义不同。

  • 单引号是 raw string literals,因此,如果您使用它们,则您试图评估字符串First Name等于字符串xyz,这显然永远不会为真
  • 另一方面,双引号用于标识符:

标识符也可以被引用。当标识符包含未在unquoted-string语法规则中指定的字符时,这是必需的。在这种情况下,标识符用双引号指定,后跟任意数量的unescaped-charescaped-char字符,再后跟一个双引号。quoted-string规则是与JSON字符串相同的语法规则,因此任何有效的字符串都可以在双引号之间使用,包括JSON支持的转义序列和六个字符的Unicode转义序列。

  • 来源:https://jmespath.org/specification.html#identifiers*

相关问题