从带有computed propertiesArray.reduce/Array.map/Object.assign的ES2015中,您可以执行以下操作:

[{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
  }
]

最佳答案

问题

  • 如何构造一个Jmespath查询,该查询返回带有任意键值对的对象
  • 根据jmespath过滤器表达式
  • 的输出,键必须是动态的

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

    例子
     [*].[@.name,@.age]
    


    [['foo', 43], ['bar', 55]]
    

    如果可以的话,可以在Jmespath外部对其进行后处理。

    也可以看看
  • github issue about this exact use-case
  • 关于javascript - JMESPath中的动态/计算键?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45236960/

    10-09 18:05