使用jq从父对象中删除密钥

Nic*_*las 4 command-line json jq

我现在正在玩JSON命令行工具JQ。我一直找不到能够帮助我解决一个相对简单问题的资源。

用例是我的JSON文件包含了我不需要的各种额外内容(超过500mb),如果我可以杀死特定密钥的数据,它将减少到将近1mb。

假设我有以下JSON:

{
  "pages": {
    "elems": { ... stuff ... }
  },
  "actions": {
    "pages": { ... stuff ... }
  }
}
Run Code Online (Sandbox Code Playgroud)

我将运行哪种命令来删除第一级的pages整个对象和密钥,但保留较低级别的pages原样?

预期产量:

{
  "actions": {
    "pages": { ... stuff ... }
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试运行:jq -c 'del(.pages)' myfile.json >outputfile.json 但这似乎也破坏了所有调用的子键pages,结果是:

{
  "actions": {}
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

jq1*_*727 7

我相信您最初的尝试应该会按预期进行。这是我尝试时得到的:

$ jq -M 'del(.pages)' myfile.json
{
  "actions": {
    "pages": {
      "stuff": "..."
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在jqplay.org上在线尝试

要删除所有页面,您需要

$ jq -M 'del(.. | .pages?)' myfile.json
{
  "actions": {}
}
Run Code Online (Sandbox Code Playgroud)

在jqplay.org上在线尝试