Jos*_*ved 2 json key object command-line-interface jq
给定格式如下的 json 文件:
[
{
"name" : "A",
"value" : "4"
},
{
"name" : "B",
"value" : "2"
},
{
"name" : "C",
"value" : {
"X": "Something",
"Y": "Else"
}
}
]
Run Code Online (Sandbox Code Playgroud)
我将如何使用 jq 将其转换为这样的内容:
{
"A": "4",
"B": "2",
"C": {
"X": "Something",
"Y": "Else"
}
}
Run Code Online (Sandbox Code Playgroud)
我确实接近使用,jq 'map( { (.name): .value } )但仍然将每个对象留在单独的大括号中,而不是将它们放在一起。
这恰好是确切的用例from_entries
$ echo '[
{
"name" : "A",
"value" : "4"
},
{
"name" : "B",
"value" : "2"
},
{
"name" : "C",
"value" : {
"X": "Something",
"Y": "Else"
}
}
]' | jq 'from_entries'
Run Code Online (Sandbox Code Playgroud)
{
"A": "4",
"B": "2",
"C": {
"X": "Something",
"Y": "Else"
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅: https: //stedolan.github.io/jq/manual/v1.6/#to_entries,from_entries,with_entries(链接到,1.6因为它是撰写本文时最新的,但from_entries至少自 以来就可用1.2。)
如果您from_entries已经注意到但认为它不起作用,因为您的数据不是name,key请注意文档中的这段引用(上面链接):
from_entries接受 key、Key、name、Name、value 和 Value 作为键。
所以name在这里工作得很好。
如果 的使用key是可以接受的,那么(使用to_entries)相反的操作也可以:
echo '{
"A": "4",
"B": "2",
"C": {
"X": "Something",
"Y": "Else"
}
}' | jq 'to_entries'
Run Code Online (Sandbox Code Playgroud)
[
{
"key": "A",
"value": "4"
},
{
"key": "B",
"value": "2"
},
{
"key": "C",
"value": {
"X": "Something",
"Y": "Else"
}
}
]
Run Code Online (Sandbox Code Playgroud)