繁体   English   中英

使用 jq 删除基于其他文件的键/值对

[英]Use jq to remove key/value pairs based on other file

我有 2 个 json 文件,其中包含我的应用程序的翻译:

zh-CN.json:

{
    "car": "car",
    "bike": "bike",
    "tree": "tree",
}

nl-NL.json:

{
    "car": "auto",
    "bike": "fiets",
    "tree": "boom",
    "house": "huis"
}

如您所见,我已从 en-US.json 文件(以及许多其他文件)中删除了house 如何使用 jq 从我的 nl-NL.json 文件中删除相同的house条目? 我基本上想根据密钥获取两个文件的交集。

我一直在玩jq 'keys'来获取所有密钥,但这不起作用。 我认为应该在jq --slurpfile en en-US.json 'del($en)' nl-NL.json的方向找到它,但这完全行不通:(有什么建议吗?

您正在寻找这样的东西:

$ jq 'del(.[(keys - (input | keys))[]])' nl-NL.json en-US.json
{
  "car": "auto",
  "bike": "fiets",
  "tree": "boom"
}

要将nl-NL.json文件缩减为en-US.json中存在的键,您可以阅读后者作为参考,然后将输入中的select转换为参考文件中存在的那些键的条目。 in检查“输入键是否在给定对象中”。

jq --argfile ref en-US.json 'with_entries(select(.key | in($ref)))' nl-NL.json
{
  "car": "auto",
  "bike": "fiets",
  "tree": "boom"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM