jqデータを追加し、残りを維持

jqデータを追加し、残りを維持

jqを使用して配列に値を追加し、残りを保持しようとしています。

   "access":{
      "allowed_users":[
         "admin",
         "test",
      ],

私が追加したい内容は上記の内容です。これを使用すると、jq '.access.allowed_users + [ "test2" ]'そこに新しいエントリが追加されますが、ファイルの残りの部分が失われるため、設定ファイルを再作成することはできません。

ベストアンサー1

追加しようとしていると仮定到着示されたJSONとJSONドキュメントの形式がうまく構成されています。

$ cat file.json
{
  "access": {
    "allowed_users": [
      "admin",
      "test"
    ]
  }
}

あなたはできます

$ jq '.access.allowed_users += ["test32"]' file.json
{
  "access": {
    "allowed_users": [
      "admin",
      "test",
      "test32"
    ]
  }
}

+=配列に追加するには、配列に新しい要素を割り当てる方法を使用します。

シェル変数に新しい値を使用します。

$ data='My "awesome" data'
$ jq --arg value "$data" '.access.allowed_users += [$value]' file.json
{
  "access": {
    "allowed_users": [
      "admin",
      "test",
      "My \"awesome\" data"
    ]
  }
}

一度に複数の項目を追加するには、次のコマンドを使用して項目を追加するのが最も簡単な方法です--args

$ jq '.access.allowed_users += $ARGS.positional' file.json --args Bilbo Frodo Sam Merry Pippin
{
  "access": {
    "allowed_users": [
      "admin",
      "test",
      "Bilbo",
      "Frodo",
      "Sam",
      "Merry",
      "Pippin"
    ]
  }
}

--argsこのオプションの後続の引数は、コマンドラインの最後の引数でなければなりません。

ファイルを変更するには、一時ファイルを使用してください。

jq ...one-of-the-above-approaches... >tmp.json &&
mv tmp.json file.json

これにより、何らかの理由で元のファイルが失敗した場合に&&元のファイルが上書きされるのを防ぎます。jq

おすすめ記事