gpt4 book ai didi

json - 使用 jq 展平/规范化 json 对象数组

转载 作者:行者123 更新时间:2023-12-04 00:16:19 26 4
gpt4 key购买 nike

我有一个很大的 json 对象数组。每个对象包含一个 foreignKeyId、一个 url、(可选)一个 urlMirror1 和(可选)一个 urlMirror2

这是一个示例:

[
{
"foreignKeyId": 1,
"url": "https://1-url.com"
},
{
"foreignKeyId": 2,
"url": "https://2-url.com",
"urlMirror1": "https://2-url-mirror-1.com",
},
{
"foreignKeyId": 3,
"url": "https://3-url.com",
"urlMirror1": "https://3-url-mirror-1.com",
"urlMirror2": "https://3-url-mirror-2.com"
}
}

我想将此 json 规范化为如下内容:

[
{
"foreignKeyId": 1,
"primariness": 1,
"url": "https://1-url.com"
},
{
"foreignKeyId": 2,
"primariness": 1,
"url": "https://2-url.com",
},
{
"foreignKeyId": 2,
"primariness": 2,
"url": "https://2-url-mirror-1.com",
},
{
"foreignKeyId": 3,
"primariness": 1,
"url": "https://3-url.com"
},
{
"foreignKeyId": 3,
"primariness": 2,
"url": "https://3-url-mirror-1.com",
},
{
"foreignKeyId": 3,
"primariness": 3,
"url": "https://3-url-mirror-2.com"
}
}

有没有办法使用 jq 做这样的事情?如果没有,还有其他建议可以在不编写太多自定义代码的情况下快速完成此操作吗?这只需要运行一次,因此任何一种骇人听闻的一次性解决方案都可以工作(bash 脚本等)。

谢谢!

更新:primariness 应该从键名派生 (url => 1, urlMirror1 => 2, urlMirror2 => 3。任何给定对象中键的顺序都是无关紧要的。镜像的数量是固定的(例如,永远不会有 urlMirror3).

最佳答案

这是一个简单的脚本,其中硬编码了镜像数量和主要性。希望它能解决问题。

jq '
map(
{ foreinKeyId } +
(
{ primariness: 1, url },
(.urlMirror1 // empty | { primariness: 2, url: . }),
(.urlMirror2 // empty | { primariness: 3, url: . })
)
)
' input.json

关于json - 使用 jq 展平/规范化 json 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63616669/

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