使用jq将CSV转换为JSON未得预期输出,求解决方案
问题解决:CSV转JSON未得到键值对结构
你的问题出在提前对CSV行做了split处理,导致jq cookbook的脚本无法正确解析。
问题原因
你执行了:
jq -cR 'split(",")' foo.csv | jq -csf csv2json.jq
第一个jq命令已经把每行CSV拆成了数组,传给第二个jq的是一个二维数组(比如[["foo","bar","quux"],["1","2","3"],...]),但cookbook的脚本是针对原始CSV文本设计的,它的第一步是split("\n")来拆分行,现在接收到的是数组而非原始字符串,后续逻辑完全失效,所以输出还是二维数组。
正确做法
1. 确认csv2json.jq的内容
确保你的脚本是处理原始CSV文本的正确版本(额外加入数值转换逻辑,匹配你预期的数字输出):
split("\n") | .[:-1] | map(split(",")) | (.[0] | map(.)) as $headers | .[1:] | map( reduce range(0; $headers | length) as $i ({}; .[$headers[$i]] = .[$i] | tonumber? // .[$i] ) )
2. 执行正确的命令
直接用jq处理原始CSV文件,不需要提前split:
jq -Rsf csv2json.jq foo.csv
或者用管道传递原始文件内容:
cat foo.csv | jq -Rsf csv2json.jq
预期输出
执行后会得到你想要的键值对结构:
[{"foo":1,"bar":2,"quux":3},{"foo":4,"bar":5,"quux":6},{"foo":7,"bar":8,"quux":9}]
内容的提问来源于stack exchange,提问作者CodeBot
相关产品推荐
相关产品推荐

