gpt4 book ai didi

json - 如何使用 jq 从嵌套的 JSON 对象派生动态 key ?

转载 作者:行者123 更新时间:2023-12-04 08:56:35 24 4
gpt4 key购买 nike

我正在使用 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_unsorted是一种值得铭记的可能性。

关于json - 如何使用 jq 从嵌套的 JSON 对象派生动态 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63800060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com