ファイルから特定のJSONオブジェクトを削除する方法は?

ファイルから特定の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"
    }
  }
}

codeファイルからオブジェクト全体を削除したいです。コマンドラインツールを使用してこれをどのように実行できますか?

答え1

.packages.codeキーとその値を削除するには、次を使用しますjq

jq 'del(.packages.code)' file.json

キー値が次の項目を.packages削除するには、次の手順を実行します。.namecode

jq 'del(.packages[] | select(.name == "code"))' file.json

両方のコマンドは同じですが、codeシェル変数から文字列を取得します。

string=code

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

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

出力を新しいファイルにリダイレクトし、問題がなければ、古いファイルをそのファイルに置き換えます。

関連情報