簡體   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