Linux命令行下用Bash将文件内容转为JSON可用转义字符串
在Bash中读取文件内容并转义为可嵌入JSON的字符串
嘿,这个需求我经常碰到!要把文件内容转成能安全嵌入JSON的字符串,关键是要正确转义所有JSON特殊字符——比如双引号、反斜杠、换行、制表符,甚至一些控制字符,不然直接嵌入会破坏JSON的结构。下面给你几种实用的方法,按推荐程度排序:
1. 最可靠的方法:用jq处理(强烈推荐)
jq是专门处理JSON的工具,它能自动处理所有需要转义的字符,完全不用你手动操心。命令非常简洁:
jq -Rs . your_file.txt
参数解释:
-R:把输入当作原始字符串处理,不会解析成JSON-s:把所有输入行合并成一个单独的字符串.:输出处理后的字符串(自动加上双引号,并且完成所有必要转义)
举个例子,如果你的文件内容是:
Hello "World"!
This is a new line.
运行命令后会输出:
"Hello \"World\"!\nThis is a new line."
直接就能嵌入到JSON对象里用了。
2. 无jq时用sed手动转义
如果系统里没有jq,可以用sed来手动替换所有特殊字符。不过这种方法需要你覆盖所有JSON要求转义的字符,容易遗漏,所以只推荐临时用:
sed -e 's/\\/\\\\/g' \ -e 's/"/\\"/g' \ -e 's/\n/\\n/g' \ -e 's/\t/\\t/g' \ -e 's/\r/\\r/g' \ -e 's/\f/\\f/g' \ -e 's/\b/\\b/g' your_file.txt | tr -d '\n'
解释每一步:
- 先转义
\(因为它是转义符,必须最先处理) - 然后转义双引号
" - 接着处理换行、制表符、回车、换页、退格这些控制字符
- 最后用
tr -d '\n'把所有原始换行符去掉,合并成一个单行字符串
注意:这种方法可能没法处理所有Unicode控制字符,如果你的文件里有这类字符,还是优先用jq。
3. 用awk实现类似效果
awk也能完成这个任务,思路和sed类似,但可以一次性读取整个文件,处理起来更灵活:
awk 'BEGIN { RS=""; gsub(/\\/,"\\\\"); gsub(/"/,"\\\""); gsub(/\n/,"\\n"); gsub(/\t/,"\\t"); print "\"" $0 "\"" }' your_file.txt
解释:
RS="":设置记录分隔符为空,这样awk会把整个文件当作一个单独的记录读取- 用
gsub依次替换所有需要转义的字符 - 最后用
print加上双引号输出结果
同样,这种方法也不如jq全面,适合没有jq的场景应急。
内容的提问来源于stack exchange,提问作者user1240018
相关产品推荐
相关产品推荐

