合并嵌套字典到根jq

  • 本文关键字:jq 字典 嵌套 合并 jq
  • 更新时间 :
  • 英文 :


我试图创建一些类似于表与实例ID和他们的标签和其他细节,这一步,我卡住了它的移动EC2标签放置在嵌套数组作为Dict对象。这里已经转换了标签字典,只需要把它和另一个数据放在一起。

{
"Id": "i-0e27418e091ea97a7",
"Name": "php"
}
{
"Id": "i-0b0a0cb6223701cb5",
"Name": "Logics-SF-Migration",
"q": "ngix"
}

以上期望的结果,down是源json。

{
"Id": "i-0e27418e091ea97a7",
"Tags": {
"Name": "php"
}
}
{
"Id": "i-0b0a0cb6223701cb5",
"Tags": {
"Name": "Main,
"q": "ngix"
}
}

只需添加.Tags的根路径,然后删除它。您也可以使用临时变量,例如.Tags as $v | del(.Tags) | . + $v

jq '. + .Tags | del(.Tags)'

最简单的解决方案是

jq 'del(.Tags) + .Tags'
{
"Id": "i-0e27418e091ea97a7",
"Name": "php"
}
{
"Id": "i-0b0a0cb6223701cb5",
"Name": "Main",
"q": "ngix"
}

演示与. + .Tags | del(.Tags)等其他解决方案的主要区别在于,它从未改变的源中删除,而不是从填充的结果中删除,这确实影响.Tags.Tags中的内容,如果存在的话。例子:

{
"Id": "123",
"Tags": {
"Name": "What about nested Tags?",
"Tags": "Should they be deleted?"
}
}
jq '(          . + .Tags | del(.Tags) ),
( del(.Tags) + .Tags              )'
{
"Id": "123",
"Name": "What about nested Tags?"
}
{
"Id": "123",
"Name": "What about nested Tags?",
"Tags": "Should they be deleted?"
}

演示

最新更新