我正在尝试使用jmespath从JSON文档中检索密钥(instanceId)。 JSON文档如下所示:
targets = {'instances':
[
{'instanceId': u'i-035dd764fe1a08091', 'hostIp': '10.200.10.150'},
{'instanceId': u'i-04ed0d110fef5aef7', 'hostIp': '10.200.10.121'},
{'instanceId': u'i-0f7778162b14c954f', 'hostIp': '10.200.20.135'}
]
}
我觉得这应该有效:
jmespath.search('instances[?hostIp=="10.200.10.150"].instanceId', targets)
但它返回一个空集。用字符串替换IP地址时,例如一个字母,它返回instanceId。当数值为数字时,搜索值的jmespath语法是什么?最终,我试图从hostIp获取instanceId。
答案 0 :(得分:1)
hostIp=="10.200.10.150"
将对象中的hostIp值与对象中的10.200.10.150值进行比较(即使用IP作为键,而不是原始值)。如果希望将其作为原始值,则需要使用单引号或使用反引号启动原始json(然后使用`"10.200.10.150"`
)
答案 1 :(得分:-1)
出于某种原因,python实现需要`(反引号)文本分隔符,而不是 '
或 "
< / p>
所以这会返回空列表:
In [1]: jp.search('instances[?hostIp=="10.200.10.150"].instanceId', targets)
Out[1]: []
但这会返回您要找的内容:
In [2]: jp.search('instances[?hostIp==`10.200.10.150`].instanceId', targets)
Out[2]: ['i-035dd764fe1a08091']