[英]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.