python - jmespath:区分未找到的键和具有空值的键

标签 python json jmespath

我正在使用 python 中的 jmespath 模块来搜索嵌套字典。

我遇到的问题是,如果在字典中找不到该键,我想引发异常。但是,某些键具有 None 值,这是完全有效的。在 jmespath 找到具有 None 值的键或未找到键的两种情况下,它都会返回 None。

有什么方法可以区分两者吗?据我所知,jmespath 没有相当于“函数”的东西。谢谢!

最佳答案

这里有关于这个问题的详细讨论 - https://github.com/jmespath/jmespath.py/issues/113

结果是使用contains来检查 key 是否存在

因此,要检查 foo.bar 是否存在于嵌套字典中,您可以使用 search 和 arg "contains(keys(foo), 'bar' )”

>>> print (jmespath.search('foo.bar', {'foo': {'bar': None}}))
None
>>> jmespath.search("contains(keys(foo), 'bar')", {'foo': {'bar': None}})
True
>>> jmespath.search("contains(keys(foo), 'bar2')", {'foo': {'bar': None}})
False

关于python - jmespath:区分未找到的键和具有空值的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51519615/

相关文章:

java - 从 Google Cloud pub/sub 反序列化 JSON 并保留 UTF-8 编码

azure - 如何在 Azure 中获取电源状态正在运行且特定标记为空的 VM 的 ID?

jsonpath - JmesPath 连接或连接嵌套数组元素

python regex - 如何创建和引用任意、未知数量的组

python - 使用 Python 的二元词云

ios - 尝试在 Swift 中将有效的 JSON 数据从 NSURLConnection 转换为 NSDictonary 时发生崩溃/错误

json - 如何在 ThreeJS 中获取 3D 对象尺寸?

python - 凯撒密码Python

python - 我需要发送不止一个 socket.send() 到一个 http 请求

azure-cli - 使用 Azure CLI 和 JMESPath 过滤网络 vnet 对等列表