簡體   English   中英

JQ:刪除 JSON 樹中任意位置的鍵值對

[英]JQ: Delete key:value pairs anywhere in JSON tree

我正在尋找一種方法來刪除 JSON 樹中任何位置的鍵值對(其中鍵是已知字符串) jq

具體來說:我想刪除"type": "Link""linkType": "Entry"各處(在層次結構的所有部分,無論它們出現在哪里)。 我的 JSON 文件長 +800000 行並且嵌套很深。

片段:

{
  "entries": [
    {
      "sys": {
        "id": "vcLKKhJ3mZNfGMvVZZi07",
        "contentType": {
          "sys": {
            "id": "page"
          }
        }
      },
      "fields": {
        "title": {
          "de-DE": "Startseite",
          "en-US": "Home"
        },
        "description": {
          "en-US": "foo"
        },
        "keywords": {
          "en-US": "bar"
        },
        "stageModules": {
          "en-US": [
            {
              "sys": {
                "type": "Link",
                "linkType": "Entry",
                "id": "11AfBBuNK8bx3EygAS3WTY"
              }
            }
          ]
        }
      }
    }
  ]
}

我已經嘗試了很多不同的方法來遍歷文件以從 output 中刪除這兩個,我經常以“無法使用字符串索引數組”結束。 例如

[ .[] | select(.linkType != "Entry", .type != "Link" ) ]

理想結果:

{
  "entries": [
    {
      "sys": {
        "id": "vcLKKhJ3mZNfGMvVZZi07",
        "contentType": {
          "sys": {
            "id": "page"
          }
        }
      },
      "fields": {
        "title": {
          "de-DE": "Startseite",
          "en-US": "Home"
        },
        "description": {
          "en-US": "foo"
        },
        "keywords": {
          "en-US": "bar"
        },
        "stageModules": {
          "en-US": [
            {
              "sys": {
                "id": "11AfBBuNK8bx3EygAS3WTY"
              }
            }
          ]
        }
      }
    }
  ]
}

有人可以幫我嗎? 感謝您的幫助。

來自jq手冊:

walk(f) function 遞歸地將 f 應用於輸入實體的每個組件。

使用它遞歸 go 通過所有項目,檢查您的條件並在必要時使用del

walk(
  if type == "object" and .type == "Link" then del(.type) else . end
)

編輯:如果“匹配不太重要”,如您 state,則只需在任何 object 上使用del

walk(if type == "object" then del(.type, .linkType) else . end)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM