这是我正在使用的JSON数据的简化示例:
[
{ "certname": "one.example.com",
"name": "fact1",
"value": "value1"
},
{ "certname": "one.example.com",
"name": "fact2",
"value": 42
},
{ "certname": "two.example.com",
"name": "fact1",
"value": "value3"
},
{ "certname": "two.example.com",
"name": "fact2",
"value": 10000
},
{ "certname": "two.example.com",
"name": "fact3",
"value": { "anotherkey": "anothervalue" }
}
]
我希望通过使用jq
获得的结果如下:
[
{
"certname": "one.example.com",
"fact1": "value1",
"fact2": 42
},
{
"certname": "two.example.com",
"fact1": "value3",
"fact2": 10000,
"fact3": { "anotherkey": "anothervalue" }
}
]
值得指出的是,并非所有元素都具有相同的名称/值对。此外,值本身就是复杂的对象。
如果我使用Python进行此操作,那没什么大不了的(是的,现在我能听到“用Python进行操作”的合唱声在我耳边响起)。我想了解如何在jq
中执行此操作,此刻我正在逃避。
答案 0 :(得分:1)
...最好使用jq ...
那是精神!本着这种精神,这是一个简洁的解决方案:
map( {certname, (.name): .value} )
| group_by(.certname)
| map(add)
当然,还有其他合理的解决方案。如果上面的内容让人一头雾水,则可能想在此处或此处添加debug
语句,或者可能想通过自己执行第一行来探索管道,等等。