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 基本用法

JavaScript:通过计算键动态解构对象

有了jmespath,处理python中的json数据就变成了一种享受...

03-Httprunner-JMESPath提取返回结果

有了jmespath,处理python中的json数据就变成了一种享受...

使用动态/计算键选择<S, K> 类型