jq:如何将列表中每个元素的键添加到其值中

时间:2018-08-14 11:33:43

标签: json jq

我有一些JSON输入,如下所示:

{
    "name1":{
        "type1":1,
        "type2":2
    },
    "name2":{
        "type2":3,
        "type3":4
    }
}

我想使用jq将其转换为类似的内容:

[
    {
        "name":"name1",
        "count":[
            {
                "type":"type1"
                "number":1
            },
            {
                "type":"type2"
                "number":2
            }
        ]
    },
    {
        "name":"name2",
        "count":[
            {
                "type":"type2"
                "number":3
            },
            {
                "type":"type3"
                "number":4
            }
        ]
    }
]

不确定是否可以这样做?

https://jqplay.org/s/b7ByAsQ571

1 个答案:

答案 0 :(得分:2)

过滤器不是很优雅,但是可以满足您的需求。您所需要做的只是一个嵌套的to_entries[]转换,并在其之上构建JSON。

jq '[ to_entries[] | 
      { "name": .key, 
        "count": [ .value | to_entries[] | { "type": .key, "number": .value } ]
      }
    ]' json

jq-play相同的代码段。