如何从文件中删除特定的 JSON 对象?

Mr.*_*ous 4 command-line json

我的文件中有以下 JSON 数据:

{
  "packages": {
    "cc": {
      "name": "cc",
      "version": "3.1",
      "release": "0.4",
      "arch": "x86"
    },
    "code": {
      "name": "code",
      "version": "3.0",
      "release": "2.0.2",
      "arch": "x86"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

code我想从文件中删除整个对象。我如何使用命令行工具来做到这一点?

Kus*_*nda 6

要删除.packages.code键及其值,请使用jq

jq 'del(.packages.code)' file.json
Run Code Online (Sandbox Code Playgroud)

要删除.packages.name键值为 的任何条目code

jq 'del(.packages[] | select(.name == "code"))' file.json
Run Code Online (Sandbox Code Playgroud)

两个命令相同,但它们code从 shell 变量中获取字符串:

string=code

jq --arg key "$string" 'del(.packages[$key])' file.json

jq --arg key "$string" 'del(.packages[] | select(.name == $key))' file.json
Run Code Online (Sandbox Code Playgroud)

将输出重定向到新文件,如果看起来正常,则用该文件替换旧文件。