jsonの要素に値を追加する

jsonの要素に値を追加する

たとえば、次のパラメータにはリスト値(マシンリスト)が含まれます。

echo $list_of_machine

worker01.sys645.com worker02.sys645.com worker03.sys645.com worker04.sys645.com worker05.sys645.com

私たちはこの標準JSONを持っています。

{
  "MNN_server": [
    "master02.sys645.com"
  ],
  "HTTP_SERVER": [
    "master01.sys645.com",
  ]
}

値を追加する方法 - $list_of_machineの下HTTP_サーバー要素は次のとおりです。

期待されるパフォーマンス

{
  "MNN_server": [
    "master02.sys645.com"
  ],
  "HTTP_SERVER": [
    "master01.sys645.com",
    "worker01.sys645.com",
    "worker02.sys645.com",
    "worker03.sys645.com",
    "worker04.sys645.com",
    "worker05.sys645.com"
  ]
}

ベストアンサー1

]「標準JSON」は実際にはJSONではありません(末尾に追加のコンマがありますHTTP_SERVER)。

また、sedこれはソースが必要な方法でフォーマットされている場合にのみ機能し、任意のJSON(改行がない可能性がある)では機能しません。

したがって、より良い解決策は次jqのように使用することです。

$ jq --arg list "$list_of_machine" '.HTTP_SERVER|=.+($list|split(" "))' < your_file.json 
{
  "MNN_server": [
    "master02.sys645.com"
  ],
  "HTTP_SERVER": [
    "master01.sys645.com",
    "worker01.sys645.com",
    "worker02.sys645.com",
    "worker03.sys645.com",
    "worker04.sys645.com",
    "worker05.sys645.com"
  ]
}

your_file.jsonもちろんよく整理されたものもあります。

おすすめ記事