首页 > 解决方案 > 使用jq如何将key添加到现有的JSON数据结构中

问题描述

您好,在此先感谢您,

所以我有以下JSON:

{
  "key1" : { 
     "someKey": "someValue"
  },
  "key2" : { 
     "someKey": "someValue"
  }
}

我正在寻找的输出是:

[
  { 
     "someKey": "someValue",
     "$key" : "key1"
  },
  { 
     "someKey": "someValue",
     "$key" : "key2"
  }
]

所以基本上我需要使用 jq 将“键”作为一个单独的属性附加到该键的对象的值中。

我已经想出了如何将值转换为数组,但我不知道如何将“$key”添加到对象中。

请帮忙。谢谢。

标签: jsonjq

解决方案


我使用以下命令找到了解决方案:

[ to_entries[] | {"$key": .key} * .value ]

这是如何工作的?

to_entries[]输出_

{
 "key": "key1",
  "value": {
    "someKey": "someValue"
  }
}
{
  "key": "key2",
  "value": {
    "someKey": "someValue"
  }
}

然后它使用'|'管道这个输出,在管道之后它创建一个对象

{"$key": .key}

然后,使用*运算符,它将这个新对象与位于输出.value中每个对象的键处的对象合并to_entries[]

最外层的包装[]只是从流中创建一个数组。


推荐阅读