【发布时间】:2026-01-24 15:00:02
【问题描述】:
有一个 JSON 文件 - landline.json
[
{
"City": "San Francisco",
"Person": "John Doe",
"Landline": false
},
{
"City": "Los Angeles",
"Person": "Steve Smith",
"Landline": false
}
]
还有另一个 JSON 文件 - mobile.json
[
{
"City": "San Francisco",
"Person": "John Doe",
"Mobile": false
},
{
"City": "Los Angeles",
"Person": "Jenny Miller",
"Mobile": false
}
]
问题是如何使用 jq 的过滤器和条件语句在"Landline": false "Mobile": false 之后为John Doe 创建一个新文件/数组?所以生成的数组应该如下所示:
[
{
"City": "San Francisco",
"Person": "John Doe",
"Landline": false,
"Mobile": false
},
{
"City": "Los Angeles",
"Person": "Steve Smith",
"Landline": false
}
]
所以算法应该遵循 - 如果在 mobile.json 中有 "Person": "John Doe" 条目并且在同一个块中有 "Mobile": false 条目,则在 "Landline": false 之后添加 "Mobile": false 条目以用于 @ 中的 "Person": "John Doe" 987654333@.
【问题讨论】:
-
你自己努力了吗?
-
那么,
Mobile和Landline是两个文件之间唯一不同的键吗? -
@oguzismail 是的,Mobile 和 Landline 是唯一不同的键。可能还值得一提的是,在每个文件中,“Person”的值是唯一的。换句话说 - 在旧金山、洛杉矶或其他城市,您将只有一个“Jon Doe”。
-
那你也可以用
jq -s 'add | group_by(.Person) | map(add | select(has("Landline") and (.Mobile | not)))' landline.json mobile.json
标签: arrays json if-statement search jq