如何用JMESPath根据指定值导出JSON对象的键?查询返回空数组
解决JMESPath筛选指定值对应键的问题
你当前使用的查询keys(@)[?contains(@, '0')]无效的核心原因是逻辑错误:keys(@)返回的是所有键的字符串数组,此时过滤条件里的@指代的是每个键本身,而你要筛选的是键对应的值为"0",并非键字符串包含"0",所以会返回空数组。
正确查询写法
要实现需求,需要先将原对象转换为键值对数组,再过滤值符合条件的项,最后提取对应键:
to_entries(@)[?value == '0'].key
分步解释
to_entries(@):把原对象转换成包含{"key": "af", "value": "0"}结构的数组,让键和值能被单独筛选。[?value == '0']:过滤出value字段等于"0"的键值对项。.key:提取这些项中的key字段,得到目标键的数组。
结果验证
用你的JSON数据执行上述查询,会返回:
["af", "dz"]
如果你需要你期望的集合格式({"af", "dz"}),可以用set()包裹查询:
set(to_entries(@)[?value == '0'].key)
执行后将返回符合你预期的集合结果。
内容的提问来源于stack exchange,提问作者DaftPlug
相关产品推荐
相关产品推荐

