如何使用jq将分隔符分隔的非JSON字符串转换为JSON数组?
使用jq将分隔的非JSON数据转换为JSON数组
jq完全支持将逗号、空格或换行分隔的非JSON列表转换为合法的JSON数组,核心是利用-R(Raw Input)模式将输入当作原始字符串处理,再结合字符串拆分或 slurping 功能实现转换。
一、逗号分隔的情况(你的示例场景)
直接使用-R读取原始输入,通过split(",")按逗号拆分字符串为数组,jq会自动处理字符串中的特殊字符(如双引号、大括号)的JSON转义:
echo 'ABC,123,XYZ,A"B,{1}' | jq -R 'split(",")'
输出结果:
["ABC","123","XYZ","A\"B","{1}"]
二、空格分隔的情况
如果改用空格作为分隔符,可通过正则表达式匹配空白符(支持单个/多个空格),同时过滤掉可能产生的空元素:
# 处理单个或多个空格分隔的场景 echo 'ABC 123 XYZ "A"B {1}' | jq -R 'split(/\s+/) | map(select(length>0))'
三、换行分隔的情况
若每个元素单独占一行,使用-R结合-s(Slurp)模式,直接将所有行打包为JSON数组:
printf 'ABC\n123\nXYZ\n"A"B\n{1}' | jq -R -s .
输出结果:
["ABC","123","XYZ","A\"B","{1}"]
为什么直接传输入会报错?
jq默认会将输入当作JSON格式解析,而逗号分隔的字符串(如A,B,C)并非合法JSON,因此触发解析错误。-R模式会强制jq将输入视为原始字符串,而非JSON数据,从而避免解析报错。
内容的提问来源于stack exchange,提问作者M. Justin
相关产品推荐
相关产品推荐

