JMESPath 中的动态/计算键?
Posted
技术标签:
【中文标题】JMESPath 中的动态/计算键?【英文标题】:Dynamic/computed keys in JMESPath? 【发布时间】:2017-12-27 11:08:24 【问题描述】:从 ES2015 开始,computed properties 和 Array.reduce/Array.map/Object.assign 你可以这样做:
[name: 'foo', age: 43, name: 'bar', age: 55].map(
o => ([o.name]: o.age)).reduce((a, b) => Object.assign(a,b), )
……然后得到:
foo: 43, bar: 55
我如何从 JMESPath 获得这个?
尝试:
$echo '["name": "foo", "age": 43, "name": "bar", "age": 55]' | jp [].name:age
[
"name": 43
,
"name": 55
]
【问题讨论】:
【参考方案1】:问题
如何构造一个返回具有任意键值对的对象的 Jmespath 查询 键需要是动态的,基于 jmespath 过滤器表达式的输出解决方法
在撰写本文时 (2019-03-22),动态键在标准 Jmespath 中不可用 但是,可以返回列表列表而不是对象列表,并且只需在 jmespath 之外对该列表列表进行后处理示例
[*].[@.name,@.age]
返回
[['foo', 43], ['bar', 55]]
如果您愿意,可以在 Jmespath 之外对其进行后处理。
另见
github issue about this exact use-case【讨论】:
哦,有意思,居然还不支持?【参考方案2】:要准确地得到这个结果: foo: 43, bar: 55
,你应该使用这个查询:
@.foo: @[0].age, bar: @[1].age
但正如您所见,我没有动态检索键 foo 和 bar,因为我无法在 JMES 路径中这样做
【讨论】:
以上是关于JMESPath 中的动态/计算键?的主要内容,如果未能解决你的问题,请参考以下文章
有了jmespath,处理python中的json数据就变成了一种享受...