JSONファイルで文字列一致後に新しい行を追加する

JSONファイルで文字列一致後に新しい行を追加する

次の作業に助けが必要です。

JSONファイルには、次のようなセクションがあります。

"Principal": {
                "AWS": [
                    "arn:aws:iam::12345677890:root",
                    "arn:aws:iam::12345677891:root",

"AWS": [文字列を探す必要があり、"arn:aws:iam::33333333333:root"という新しい行を追加する必要があります。更新されたjsonコンテンツは次のようになります。

"Principal": {
                "AWS": [
                    "arn:aws:iam::33333333333:root",
                    "arn:aws:iam::12345677890:root",
                    "arn:aws:iam::12345677891:root",

sedを使用してこれを行うにはどうすればよいですか?

ベストアンサー1

PrincipalあなたがJSONドキュメントの最上位オブジェクトであり、シェル変数に格納されているいくつかの文字列をentryその下(最初に)配列に追加したいとしますAWS

entry='arn:aws:iam::33333333333:root'

jq --arg e "$entry" '.Principal.AWS |= [$e,.[]]' file.json

この式は、jqコマンドラインで代入を使用して、変数に含まれる文字列を配列の先頭に追加します(追加された要素から始まり、元の配列の要素が続く新しい配列で配列を更新/再作成します)。jq$e--argAWS|=$e

要素の追加終わり配列の変更は少し簡単になり、おそらくより効率的です(完全な配列を書き換える必要はありません)。

jq --arg e "$entry" '.Principal.AWS += [$e]' file.json

テスト:

$ cat file.json
{
  "Principal": {
    "AWS": [
      "arn:aws:iam::12345677890:root",
      "arn:aws:iam::12345677891:root"
    ]
  }
}
$ entry='arn:aws:iam::33333333333:root'
$ jq --arg e "$entry" '.Principal.AWS |= [$e,.[]]' file.json
{
  "Principal": {
    "AWS": [
      "arn:aws:iam::33333333333:root",
      "arn:aws:iam::12345677890:root",
      "arn:aws:iam::12345677891:root"
    ]
  }
}
$ jq --arg e "$entry" '.Principal.AWS += [$e]' file.json
{
  "Principal": {
    "AWS": [
      "arn:aws:iam::12345677890:root",
      "arn:aws:iam::12345677891:root",
      "arn:aws:iam::33333333333:root"
    ]
  }
}

おすすめ記事