gpt4 book ai didi

json - 合并 JSON 文件但保留空键(最好使用 JQ)

转载 作者:行者123 更新时间:2023-12-03 23:38:18 26 4
gpt4 key购买 nike

有没有办法在一个键上合并两个 JSON 文件但保留空键,最好在 JQ 中?
文件合并于 url .
文件 1:

[
{
"url": "ABC",
"name": "Search",
"version": "2020",
"Ocurrences": "25"
},
{
"url": "DEF",
"name": "Welcome",
"version": "2021",
"Ocurrences": "10"
}
]
文件2:
[
{
"url": "DEF",
"title": "Support"
},
{
"url": "GHI",
"title": "Contact"
}
]
想要的结果:
[
{
"url": "ABC",
"title": "",
"name": "Search",
"version": "2020",
"Ocurrences": "25"
},
{
"url": "DEF",
"title": "Support",
"name": "Welcome",
"version": "2021",
"Ocurrences": "10"
},
{
"url": "GHI",
"title": "Contact",
"name": "",
"version": "",
"Ocurrences": ""
}
]
当前 JQ 脚本:
jq -M '[group_by(.url)[]|add]' fi1e1.json file2.json > output.json
当前结果:
[
{
"url": "ABC",
"name": "Search",
"version": "2020",
"Ocurrences": "25"
},
{
"url": "DEF",
"title": "Support",
"name": "Welcome",
"version": "2021",
"Ocurrences": "10"
},
{
"url": "GHI",
"title": "Contact"
}
]
真实文件有 100 多个对象。键的顺序无关紧要。 JQ 是首选,因为我只知道 Bash。
目标是将从 Azure Application Insights 提取的数据与本地硬盘驱动器上的数据合并。
感谢您的任何帮助或指导。

最佳答案

是的。
使用 reduce避免了 group_by 带来的排序.例如,你可以写:

. as $one
| input as $two
| ($one[0] + $two[0] | map_values("")) as $defaults
| INDEX($one[]; .url) as $one
| INDEX($two[]; .url) as $two
| reduce ($one+$two|keys_unsorted)[] as $k ({};
.[$k] = ($defaults + $one[$k] + $two[$k]) )
| [.[]]
笔记:
  • 以上假设调用以下形式: jq ... file1.json file2.json
  • 注意 jq 如何支持“$-variables”的阴影。
  • 可能值得考虑使用 null而不是 ""作为您所谓的“空键”的值。
  • 根据详细要求,您可能希望按照以下方式设置 $defaults:(($one|add) + ($two|add) | map_values(""))
  • 关于json - 合并 JSON 文件但保留空键(最好使用 JQ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68092167/

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