2016-11-01 35 views
2

我想從npm shrinwrap json文件中刪除所有resloved。這是在其他機器上運行npm install時造成的問題。如何使用JQ刪除所有嵌套密鑰

"cssstyle": { 
     "version": "0.2.37", 
     "from": "[email protected]>=0.2.29 <0.3.0", 
     "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz" 
    }, 
    "dashdash": { 
     "version": "1.14.0", 
     "from": "[email protected]>=1.12.0 <2.0.0", 
     "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.0.tgz", 
     "dependencies": { 
     "assert-plus": { 
      "version": "1.0.0", 
      "from": "[email protected]>=1.0.0 <2.0.0", 
      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" 
     } 
     } 
    }, 
    "debug": { 
     "version": "2.2.0", 
     "from": "[email protected]>=2.2.0 <3.0.0", 
     "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz" 
    } 

如何從所有文件刪除解決關鍵

我使用的模式:

jq 'del(.resolved)' file.json 

回答

1

在我看來,對這類問題最簡單的方法是使用walk/1

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

如果您JQ沒有walk/1 (它僅在jq 1.5發佈後作爲內置函數提供),然後在上面的行之前簡單地添加它的定義(在Web上很容易獲得),或者將其包含在〜/ .jq文件中。

+0

這是一個命令嗎? –

+0

在jq術語中,它是一個過濾器,就像您提供的過濾器一樣。你可以像你一樣在命令行上給它,或者把它放在一個文件中並用-f選項調用jq。 – peak

+1

如何添加WALK? –