如何使用jq按条件删除JSON数组对象中指定数组的特定值
正确执行命令
直接运行如下命令即可得到你需要的输出:
jq 'map(. as $current | .co_author |= map(select(. != $current.creator)))' test_4.json
命令逻辑说明
- 外层
map()用于遍历最外层JSON数组的每个作者对象 . as $current将当前正在处理的作者对象存入临时变量$current,避免嵌套操作时上下文丢失,无法正确获取对应creator字段值.co_author |= map(select(. != $current.creator))对co_author数组做更新:遍历co_author的每个元素,仅保留与当前对象creator值不相等的元素
原命令错误原因
你之前的命令存在两个问题:
- 语法不完整:if条件分支缺少else分支和闭合的
end关键字 - 逻辑错误:直接用
.co_author[] == .creator的判断逻辑无法精准定位要删除的元素,也无法保留co_author数组的原有结构
内容的提问来源于stack exchange,提问作者sudal
相关产品推荐
相关产品推荐

