Python中使用JMESPath提取含空格键的JSON数据问题
JMESPath提取含空格键名的JSON条目问题
给定如下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"} ]
提取无空格键名的条目时可以正常工作,比如使用JMESPath表达式 [?Name=='name1'],能得到正确结果:
[ { "First Name": "xyz", "Last Name": "abc", "Name": "name1" } ]
但提取含空格的键名(如First Name)时遇到问题:
- 使用表达式
[?First Name =='xyz']会报错:Syntax error: expected Rbracket, got: UnquotedIdentifier - 使用表达式
[?'First Name' =='xyz']返回空数组[]
使用的Python中JMESPath版本为0.10.0,请问问题出在哪里?
问题原因与正确写法
JMESPath中,当键名包含空格或其他特殊字符时,必须用双引号将键名包裹,而非单引号。
正确的表达式应为:
[?"First Name" == 'xyz']
错误原因分析:
[?First Name =='xyz']:JMESPath会将空格后的Name识别为独立标识符,破坏了表达式的语法结构,导致解析报错。[?'First Name' =='xyz']:JMESPath中单引号用于定义字符串字面量,此处'First Name'被当作字符串值而非键名,实际是在比较字符串'First Name'和'xyz',结果必然为空。
使用正确表达式后,将得到预期结果:
[ { "First Name": "xyz", "Last Name": "abc", "Name": "name1" } ]
内容的提问来源于stack exchange,提问作者host_unreachable
相关产品推荐
相关产品推荐

