Bash:如何从多行字符串构建 JSON

WeS*_*See 2 bash awk json

我的awk输出是多行字符串。

awkresult=`awk '{...}'`
echo "{ \"result\": \"$awkresult\" }" > result.json
Run Code Online (Sandbox Code Playgroud)

多行必须保留在结果字符串中。

我认为最好的方法是在每行末尾插入换行符awkresult

我的awk脚本无法修改。我应该如何修改我的代码?

Kus*_*nda 6

请注意,值中的换行符必须按照\nJSON 进行编码。JSON 解析器会将这些解码为真正的换行符。在 JSON 文件的值中插入文字换行符会导致 JSON 文档损坏。

使用jo(在 shell 中生成 JSON 输出的工具,具有正确的编码等):

awkresult='some string
with newlines
the end'

jo result="$awkresult"
Run Code Online (Sandbox Code Playgroud)

这将导致输出

{"result":"some string\nwith newlines\nthe end"}
Run Code Online (Sandbox Code Playgroud)

漂亮的打印:

jo -p result="$awkresult"
Run Code Online (Sandbox Code Playgroud)

这导致

{
   "result": "some string\nwith newlines\nthe end"
}
Run Code Online (Sandbox Code Playgroud)

将输出重定向jo到文件以保存输出,例如

jo result="$awkresult" >result.json
Run Code Online (Sandbox Code Playgroud)