用sed转义JSON内换行符并保留JSON间换行适配PostgreSQL COPY
解决PostgreSQL COPY处理JSON时的换行符问题
要实现仅转义JSON对象内部的换行符,保留对象之间的换行,推荐使用专门的JSON处理工具,避免正则匹配可能带来的结构解析错误:
方法一:使用jq(推荐)
jq可以正确解析JSON结构,自动转义内部换行并保持每个JSON对象为一行,完全适配PostgreSQL COPY的需求:
jq -c . input.json > output.json
-c参数:以紧凑格式输出,每个JSON对象占一行.表示原样输出JSON内容,仅自动处理内部换行的转义
方法二:使用GNU sed(备选,适合无jq环境)
如果无法使用jq,可以用GNU sed的多行匹配功能,精准处理JSON内部的换行:
gsed -E ':a; /\{/{:b; N; /\}/!bb; s/\n/\\n/g; s/\\n\}$/\n/}' input.json > output.json
命令逻辑:
- 匹配到JSON对象起始的
{后,持续读取内容直到遇到对应的} - 将当前JSON对象内的所有换行替换为转义的
\\n - 把JSON对象结尾
}前的转义换行还原为实际换行,保留对象之间的分隔
处理后的文件可直接用PostgreSQL COPY命令导入:
COPY your_table (json_column) FROM '/path/to/output.json';
内容的提问来源于stack exchange,提问作者deb0rian
相关产品推荐
相关产品推荐

