我想从命令行中为两个.json文件执行此操作:
#echo '[' . (cat file1.json) . ',' . (cat file2.json) . ']'
但这显然是伪代码。我该怎么做?
答案 0 :(得分:1)
echo "[ $(cat file1.json) , $(cat file2.json) ]"
只要文件本身是有效的json
就可以工作答案 1 :(得分:1)
你想要最终的结构并不完全清楚,但让我试着帮助。
我假设您有2个文件只包含有效的json,并从您的问题猜测您要将这两个文件作为数组成员打印。
为了示例,我假设file1.json
看起来像这样:
{"name":"object1"}
file2.json
就像这样:
{"name":"object2"}
这可以使用jq
来完成,这是一个非常有用的解析JSON流的工具,使用-s/--slurp
选项,它将整个输入流读取到一个缓冲区而不是分别处理每个对象。将对象组合成一个数组还有额外的好处。我们可以使用默认的“passthrough”过滤器'.'
并将这两个文件传输到一个数组中。
cat file1.json file2.json | jq --slurp '.'
将输出:
[
{
"name": "object1"
},
{
"name": "object2"
}
]
如果您想在对象中使用该数组,可以使用过滤器{"array":.}
我强烈推荐jq
用于您计划从shell执行的任何JSON交互,但如果您不能,并且必须使用内置,那么您可以将这样的内容组合在一起:
echo '['"$(cat file1.json)"','"$(cat file2.json)"']'
此解决方案使用子shell $()
来执行其中的命令,并将其输出包含在echo中。
我再次重申,使用jq
。它更干净,更坚固,并确保输入和输出是有效的JSON。
答案 2 :(得分:-1)
{ cat file1.json ; echo ','; cat file2.json; }