如何将Bash数组转换为指定格式的JSON并写入文件?
问题
我有一个Bash数组:
my_strings=("hello" "world")
目前我能通过以下命令将其转换为JSON并写入文件:
for f in "${my_strings[@]}"; do printf '%s' "$f" | jq -R -s .; done | jq -s >> test_.json
生成的文件内容为:
[ "hello", "world" ]
但我期望的输出格式是:
{ "strings_": [ "hello", "world" ] }
我尝试通过拼接字符的方式实现,但生成的缩进效果不佳,请问有没有更优的实现方法?
解决方案
可以简化命令,无需循环处理每个元素,直接用jq一次性完成结构封装,既高效又能保证标准的JSON缩进格式:
printf '%s\n' "${my_strings[@]}" | jq -R . | jq -s '{strings_: .}' > test_.json
命令说明
printf '%s\n' "${my_strings[@]}":将数组每个元素按行输出,确保每个字符串作为独立输入行传递给jqjq -R .:把每一行的原始字符串转换为合法的JSON字符串jq -s '{strings_: .}':将所有JSON字符串收集为数组,再封装到指定键strings_的对象中,jq会自动处理标准缩进格式
执行后生成的test_.json内容会完全符合你期望的格式,同时避免了手动拼接字符带来的格式问题。
内容的提问来源于stack exchange,提问作者roschach
相关产品推荐
相关产品推荐

