如何使用jq将逗号分隔的JSON对象转换为JSON数组?
解决逗号分隔JSON对象转JSON数组的问题
我明白你的痛点——这种半合法的JSON格式(多个对象用逗号直接分隔)确实让人头疼,用split(",")只能得到字符串数组,因为jq还没把这些字符串解析成真正的JSON对象。下面给你两种靠谱的解决方案,分别适用于不同场景:
方法一:简单场景(对象内部无逗号)
如果你的JSON对象里没有包含逗号的字符串值(比如{"a": "hello, world"}这种情况不存在),可以用这个简洁的命令:
jq -sR 'split(",") | map(select(length > 0) | fromjson)' myfile.json
命令解释:
-s:把整个文件的内容读成单个字符串(而不是逐行处理)-R:以原始字符串模式读取输入,不把内容当成JSON解析split(","):按逗号分割成字符串数组select(length > 0):过滤掉可能存在的空字符串(比如文件末尾多余的逗号导致的)fromjson:把每个字符串解析成真正的JSON对象map(...):对数组里的每个元素执行解析操作
方法二:通用场景(支持对象内部有逗号)
如果你的JSON对象里可能包含带逗号的字符串(比如{"desc": "apple, banana"}),上面的split(",")会错误拆分对象内容。这时候可以用这种更稳妥的方式:
jq -R '.' myfile.json | jq -s 'join("") | "[" + . + "]" | fromjson'
命令解释:
- 第一步
jq -R '.' myfile.json:把文件内容按原始字符串输出(确保保留所有字符) - 第二步
jq -s 'join("")':把所有输入内容拼接成一个完整的字符串 "[" + . + "]":给拼接后的字符串前后加上方括号,变成合法的JSON数组格式fromjson:把整个字符串解析成JSON数组
这样即使对象内部有逗号,也不会被错误拆分,因为我们是先把整个内容转换成合法的JSON数组格式,再整体解析。
验证效果
假设你的myfile.json内容是:
{"a":1},{"b":2,"desc":"test, case"},{"c":3},
用方法二处理后,会得到正确的数组:
[ {"a": 1}, {"b": 2, "desc": "test, case"}, {"c": 3} ]
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

