[英]How do I derive dynamic keys from a nested JSON object with jq?
我正在使用jq
以這種格式轉換帶有一些嵌套動態鍵的 JSON 輸入:
{
"somePackage": {
"someVersion": {
"size": {
"regular": 1234,
"compressed": 123
}
}
},
"someOtherPackage": {
"someOtherVersion": {
"size": {
"regular": 5678,
"compressed": 567
}
}
}
}
... 轉換為以下格式的對象數組:
[
{
"name": "somePackage",
"version": "someVersion",
"regular": 1234,
"compressed": 123
},
{
"name": "someOtherPackage",
"version": "someOtherVersion",
"regular": 5678,
"compressed": 567
}
]
我已經設法做到了:
jq 'to_entries | map_values({
name: .key,
version: .value|keys[0],
regular: .value[.value|keys[0]].size.regular,
compressed: .value[.value|keys[0]].size.compressed
})' input.json
有沒有辦法訪問原始 JSON 中每個級別的動態鍵,這樣我就可以將它們用作輸出中的值而減少重復?
您可以使用 jq 所謂的“$-variables”,例如
to_entries
| map_values(
(.value|keys[0]) as $innerkey
| { name: .key,
version: $innerkey,
regular: .value[$innerkey].size.regular,
compressed: .value[$innerkey].size.compressed
})
您還可以為.value[$innerkey].size
引入一個變量,或者更好的是,簡化:
to_entries
| map_values(
(.value|keys[0]) as $innerkey
| { name: .key, version: $innerkey }
+ .value[$innerkey].size )
請注意, keys
對keys
排序,因此盡管在這種情況下這無關緊要,但使用keys_unsorted
是一種值得記住的可能性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.