如何使用shell脚本将json对象添加到json文件

use*_*439 15 linux shell json

json文件如下:

{"name" :"sam",
"age":23,
"designation":"doctor"}
Run Code Online (Sandbox Code Playgroud)

现在我想使用bash脚本在文件末尾添加另一个json对象{"location":"canada"}我已经尝试了echo"{"location":"canada"}">> sample.json

但结果

{"name" :"sam",
"age":23,
"designation":"doctor"} {location:canada}
Run Code Online (Sandbox Code Playgroud)

但我希望它像这样

{"name" :"sam",
"age":23,
"designation":"doctor", 
"location":"canada"}
Run Code Online (Sandbox Code Playgroud)

请建议我

jfs*_*jfs 49

要合并两个json对象,可以使用jq命令行实用程序:

$ jq -s add sample.json another.json
Run Code Online (Sandbox Code Playgroud)

输出:

{
  "name": "sam",
  "age": 23,
  "designation": "doctor",
  "location": "canada"
}
Run Code Online (Sandbox Code Playgroud)

要更新单个属性:

$ jq '.location="canada"' sample.json
Run Code Online (Sandbox Code Playgroud)

它产生相同的输出.

要预先添加"doctor"到位置:

$ jq '.location = "doctor" + .location' input.json
Run Code Online (Sandbox Code Playgroud)

输出:

{
  "name": "sam",
  "age": 23,
  "designation": "doctor",
  "location": "doctorcanada"
}
Run Code Online (Sandbox Code Playgroud)

  • `jq'.location ="canada"'sample.json`是唯一可行的,但它没有附加到sample.json; 它只是将其打印到屏幕上.整个想法是我们想要附加到一个儿子文件.`jq -s add`一直给出"解析错误:第3行第32列的数字文字无效".即使你删除"年龄":23,你仍然会得到"无效的数字文字".这对你们有什么用? (4认同)
  • 我只和jq一起工作了5分钟,但它很灵活.我强烈推荐使用ed/sed/awk复杂的东西. (2认同)
  • @熊:答案工作中的所有示例(我刚刚在机器上的当前`jq`版本中再次进行了检查:`jq --version`-> jq-`1.5-1-a5b5cbe`)。所有示例都显示在屏幕上(在为案例调整过滤器时,您不想破坏输入数据。如果您不知道如何将输出保存到文件中,请询问)。我发现有人赞成您的评论。这是否意味着存在无法使用“ jq”的环境? (2认同)

per*_*eal 10

sed -i '$s/}/,\n"location":"canada"}/' sample.json
Run Code Online (Sandbox Code Playgroud)

结果:

{"name" :"sam",
"age":23,
"designation":"doctor",
"location":"canada"}
Run Code Online (Sandbox Code Playgroud)

  • @kampu:使用`sed`来处理带有正则表达式的json数据很脆弱且不必要复杂.[还有更好的选择](http://stackoverflow.com/a/16835501/4279). (2认同)
  • `'$ s /} /,\ n“位置”:“'$ loc'”} /'` (2认同)