1

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

4

2 回答 2

1

hostIp=="10.200.10.150"将对象中hostIp 的值与对象中10.200.10.150 的值进行比较(即使用IP 作为键,而不是原始值)。如果您希望它是原始值,则需要使用单引号,或使用反引号来启动原始 json(然后使用`"10.200.10.150"`

于 2018-08-23T21:26:16.110 回答
-1

出于某种原因,python 实现需要`(反引号)文本分隔符而不是'or"

所以这会返回空列表:

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

于 2018-01-02T14:16:53.350 回答