JMESPath中的动态/计算键?

A T*_*A T 7 javascript arrays computed-properties jmespath

从ES2015具有计算的属性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), {})
Run Code Online (Sandbox Code Playgroud)

…并获得:

{ foo: 43, bar: 55 }
Run Code Online (Sandbox Code Playgroud)

如何从JMESPath获得此信息?


尝试:

$echo '[{"name": "foo", "age": 43}, {"name": "bar", "age": 55}]' | jp [].{name:age}
[
  {
    "name": 43
  },
  {
    "name": 55
  }
]
Run Code Online (Sandbox Code Playgroud)

dre*_*mac 7

问题

  • 如何构造返回具有任意键值对的对象的 Jmespath 查询
  • 键需要是动态的,基于 jmespath 过滤器表达式的输出

解决方法

  • 截至撰写本文时(2019-03-22),动态键在标准 Jmespath 中不可用
  • 但是,可以返回列表的列表而不是对象列表,并且只需在 jmespath 之外对该列表的列表进行后处理

例子

 [*].[@.name,@.age]
Run Code Online (Sandbox Code Playgroud)

退货

[['foo', 43], ['bar', 55]]
Run Code Online (Sandbox Code Playgroud)

然后可以在 Jmespath 之外进行后处理(如果您可以选择)。

也可以看看