如何解决如何使用jq从嵌套的JSON对象派生动态密钥?
我正在使用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
还是需要牢记的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。