使用jq 1.6处理OpenAI返回JSON时遇控制字符转义错误求助
解决jq解析含未转义换行符的JSON报错问题
问题背景
你保存了OpenAI API返回的JSON响应到sample.json,其中content字段包含未转义的换行符。使用jq -r '.choices[0].message.content'提取内容时,触发解析错误:
parse error: Invalid string: control characters from U+0000 through U+001F must be escaped at line 3, column 69
解决方案
问题根源是文件中的JSON不符合标准格式(未转义的换行符属于控制字符,必须转义为\n),以下是几种命令行修复方法:
方法1:用jq自身的原始输入模式处理
cat sample.json | jq -Rs 'gsub("\n"; "\\n") | fromjson | .choices[0].message.content'
-R:让jq以原始字符串模式读取每行内容-s:将所有行拼接成单个字符串gsub("\n"; "\\n"):把所有未转义的换行符替换为标准JSON转义格式fromjson:将处理后的字符串解析为JSON对象,再提取目标内容
方法2:用sed预转义换行符
sed ':a;N;$!ba;s/\n/\\n/g' sample.json | jq -r '.choices[0].message.content'
:a;N;$!ba:循环读取所有行并拼接成一个整体s/\n/\\n/g:全局替换换行符为转义格式,再传给jq解析
方法3:用perl预转义换行符
perl -pe 's/\n/\\n/g' sample.json | jq -r '.choices[0].message.content'
-pe:逐行处理输入并打印结果,s/\n/\\n/g完成换行符转义
内容的提问来源于stack exchange,提问作者randombits
相关产品推荐
相关产品推荐

