将JSON通过命令行输出到文件

22

我有一个构建工具,可以创建一个versions.json文件并注入一个json格式字符串。

最初,我想通过echo命令注入json,代码如下。

json = {"commit_id": "b8f2b8b", "environment": "test", "tags_at_commit": "sometags", "project": "someproject", "current_date": "09/10/2014", "version": "someversion"}

echo -e json > versions.jso

然而,echo 似乎会转义所有引号,因此我的文件最终会变成这样:

{commit_id: b8f2b8b, environment: test, tags_at_commit: somereleasetags, project: someproject, current_date: 09/10/2014, version: someproject}

很遗憾,这不是合法的 JSON。


cat json > versions.json? - Niels Keurentjes
2个回答

49

为了保留双引号,您需要使用单引号将变量括起来,如下所示:

json='{"commit_id": "b8f2b8b", "environment": "test", "tags_at_commit": "sometags", "project": "someproject", "current_date": "09/10/2014", "version": "someversion"}'
echo "$json" > versions.json

请注意,这种方法将无法正确显示变量,而是输出文字 '$variable'。

如果需要输出变量,请使用 cat << EOF 结构,该结构利用了内置于 Bash 的 Here Document 重定向功能。有关更多信息,请参阅 man bash 并搜索“here document”。

示例:

commit="b8f2b8b"
environment="test"
...etc

cat << EOF > /versions.json
{"commit_id": "$commit", "environment": "$environment", "tags_at_commit": "$tags", "project": "$project", "current_date": "$date", "version": "$version"}
EOF

如果您正在寻找一种更高级的JSON处理工具,并且它可以很好地与Bash配合使用,我建议使用jq


如果JSON包含一个数组,该怎么办?例如:{ "a" : "test", "b": ["test1","test2"] }我该如何实现它? - Tjs
这个链接可能有帮助:https://dev59.com/bWcs5IYBdhLWcg3w3HkG#12524510 - Adiii

0
如果你想在变量中间添加引号,可以使用这个格式:'"'$variable'"'。下面是一个日期示例。
echo {'"date"' : '"'$(date +"%d_%m_%Y")'"'} > cron_checkpoint.json

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接