1. ホーム
  2. json

[解決済み] bashスクリプトでjsonファイルを変更する

2023-05-07 01:57:10

質問

以下の問題を解決するために、あなたの助けが必要です。 私は次のようなJSONファイルを持っています。

{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}

新しいキーを追加したり削除したりするにはどうすればよいのでしょうか (すなわち "key4": "value4" をbashスクリプトで追加・削除するにはどうしたらよいでしょうか? また、新しいキーを追加または削除する前に、ファイル内の最後のキーの末尾にカンマを追加または削除するという問題もありますね。

ありがとうございます。

どのように解決するのですか?

あなたの JSON CLIを使用するのが最善策です。 のような jq :

  • Ubuntu のような Debian ベースのシステムでは sudo apt-get install jq
  • macOS では、Homebrew を使って ( http://brew.sh/ ) がインストールされている場合 brew install jq

例: 次の入力文字列に基づいて - 出力は次のとおりです。 stdout :

jsonStr='{ "key1": "value1", "key2": "value2", "key3": "value3" }'

キー3(quot)を削除してください。

jq 'del(.key3)' <<<"$jsonStr"

プロパティ "key4" を値 "value4" と共に追加します。

jq '. + { "key4": "value4" }' <<<"$jsonStr"

既存のプロパティ "key1" の値を "new-value1" に変更します。

jq '.key1 = "new-value1"' <<<"$jsonStr"

より堅牢な代替案 をありがとうございます。 Lars Kiesow :

新しい値を --arg , jq は値を適切にエスケープするように配慮しています。

jq '.key1 = $newVal' --arg newVal '3 " of rain' <<<"$jsonStr"


もし、あなたが JSON ファイルをその場で更新したい場合 (概念的には) のように、"key3"を削除する例で説明します。

# Create test file.
echo '{ "key1": "value1", "key2": "value2", "key3": "value3" }' > test.json

# Remove "key3" and write results back to test.json (recreate it with result).
jq -c 'del(.key3)' test.json > tmp.$$.json && mv tmp.$$.json test.json

入力ファイルを直接置き換えることはできないので、結果は一時ファイルに書き込まれ、成功したときに入力ファイルを置き換えます。

注意点として -c オプションに注意してください。このオプションは、プリティプリントされたJSONではなく、コンパクトなJSONを生成します。

については すべてのオプションとコマンド を参照してください。 マニュアル http://stedolan.github.io/jq/manual/ .