当value是数字时,使用jmespath从键/值对获取值

时间:2017-11-07 03:28:38

标签: python jmespath

我正在尝试使用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。

2 个答案:

答案 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']