Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用shell脚本将json对象添加到json文件_Linux_Json_Shell - Fatal编程技术网

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

Linux 如何使用shell脚本将json对象添加到json文件,linux,json,shell,Linux,Json,Shell,json文件如下所示: {"name" :"sam", "age":23, "designation":"doctor"} 现在我想使用bash脚本在文件末尾添加另一个json对象{“location”:“canada”} 我尝试了echo“{”location:“canada”}”>>sample.json 但结果是 {"name" :"sam", "age":23, "designation":"doctor"} {location:canada} 但我希望是这样 {"name" :"s

json文件如下所示:

{"name" :"sam",
"age":23,
"designation":"doctor"}
现在我想使用bash脚本在文件末尾添加另一个json对象{“location”:“canada”} 我尝试了echo“{”location:“canada”}”>>sample.json

但结果是

{"name" :"sam",
"age":23,
"designation":"doctor"} {location:canada}
但我希望是这样

{"name" :"sam",
"age":23,
"designation":"doctor", 
"location":"canada"}
请推荐我

sed -i '$s/}/,\n"location":"canada"}/' sample.json
结果:

{"name" :"sam",
"age":23,
"designation":"doctor",
"location":"canada"}

要合并两个json对象,可以使用:

$jq-s添加sample.json另一个.json
输出:

{
“姓名”:“山姆”,
“年龄”:23岁,
“指定”:“医生”,
“地点”:“加拿大”
}
要更新单个属性,请执行以下操作:

$jq'.location=“canada”'sample.json
它产生相同的输出

要将“医生”添加到位置,请执行以下操作:

$jq'.location=“doctor”+.location”input.json
输出:

{
“姓名”:“山姆”,
“年龄”:23岁,
“指定”:“医生”,
“地点”:“doctorcanada”
}

感谢它工作正常,我还有一个要求,我想将一个json对象值附加到另一个对象上。例如,我想在加拿大添加“doctor”,结果应该是{“name”:“sam”,“age”:23,“designation”:“doctor”,“location”:“doctorcanada”}@kampu:using
sed
用正则表达式处理json数据既脆弱又复杂。仅供参考——如果您使用sed-i。。。在Mac上,您会遇到以下错误:“sed:1:“sample.json”:unterminated substitute pattern”。但如果你在Linux(Ubuntu)中使用它,你就没事了。有人知道如何在该语句中使用变量吗?如果执行:loc=“canada”,然后执行
sed-i'$s/}/,\n“location”:“$loc”}/”sample.json
,则该操作无效。它没有呈现变量,而是放置“location”:“$loc”。
'$s/}/,\n“location”:“$loc'}/”
Shell脚本不太适合此任务。您应该尝试找到一个真正理解JSON的工具。如果你了解Python,请看一看。我只与jq合作了5分钟,但它非常灵活。与使用ed/sed/awk处理复杂的事情相比,我强烈建议使用这种方法。
jq'.location=“canada”'sample.json
是唯一有效的方法,但它没有附加到sample.json;它只是把它打印到屏幕上。整个想法是我们想附加到一个子文件中
jq-s add
不断给出“解析错误:第3行第32列的数值文本无效”。即使删除“年龄”:23,仍然会得到“无效数字文字”。这对你们来说是如何工作的?@Bear:答案中的所有示例都有效(我刚刚再次检查了我机器上当前的
jq
版本:
jq--version
->jq-
1.5-1-a5b5cbe
)。所有示例都会打印到屏幕上(您不希望在为您的案例调整过滤器时损坏输入数据。如果您不知道如何将输出保存到文件中,请询问)。我看到有人对你的评论投了赞成票。这是否意味着存在一个
jq
不起作用的环境?