You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jq基于另一个JSON文件的键移除目标文件的键值对

解决方法

要让nl-NL.json只保留en-US.json中存在的键(即获取两者的键交集),可以用以下jq命令实现:

方法一(推荐,jq 1.6及以上版本支持)

jq --argfile en en-US.json 'with_entries(IN(.key; $en | keys[]))' nl-NL.json

命令逻辑:

  1. 通过--argfile en en-US.json将en-US.json的内容加载到变量$en中
  2. $en | keys[]提取出en-US.json的所有键
  3. with_entries(IN(.key; ...))遍历nl-NL.json的每个键值对,仅保留键存在于en-US.json键列表中的条目

如果需要直接修改nl-NL.json文件(操作前请务必备份原文件),可通过重定向实现:

jq --argfile en en-US.json 'with_entries(IN(.key; $en | keys[]))' nl-NL.json > temp.json && mv temp.json nl-NL.json

方法二(兼容低版本jq)

若你的jq版本低于1.6,不支持IN函数,可改用index判断键是否存在:

jq --argfile en en-US.json '($en | keys) as $keys | with_entries($keys | index(.key) != null)' nl-NL.json

你之前的命令无效原因

  • jq 'keys'仅输出当前文件的所有键,未执行任何过滤或删除操作
  • jq --slurpfile en en-US.json 'del($en)' nl-NL.json错误在于del需要传入具体的键路径,而$en是整个JSON对象,并非要删除的键列表,因此无法生效

内容的提问来源于stack exchange,提问作者Rogier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 05:10:23