Bash

在json中的元素下附加值

  • February 26, 2019

以下參數包括列表值(機器列表)例如

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",
 ]
}

如何在HTTP_SERVER元素下附加值 - $list_of_machine,如下所示

預期成績

{
 "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"
 ]
}

請注意,您的“標準 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

引用自:https://unix.stackexchange.com/questions/502938