Ruby通过ARGF解析CSV异常:新版本兼容性及便携实现方案咨询
版本兼容性说明
- 你提到的Ruby 2.7 CSV库处理ARGF的缺陷属于版本特定Bug,Ruby 3.0及更高正式版本已经完成修复,不再受该问题影响。
跨版本可移植实现方案
如果需要兼容Ruby 2.0到3.x全版本,可以调整实现逻辑,先主动读取ARGF包含的所有输入流内容,再交给CSV解析,避开不同版本CSV对ARGF流的增量读取逻辑差异,最小改动的命令如下:
# 动态加表头转换CSV为JSON,兼容全Ruby版本 echo 'key1,key2' | ruby -rcsv -rjson -e 'puts CSV.new(ARGF.read, headers: true).map(&:to_hash).to_json' - file.csv
上述修改仅将原代码中的CSV.new(ARGF, headers:true)改为CSV.new(ARGF.read, headers:true),通过ARGF.read一次性读取标准输入和后续指定文件的全部内容,再传入CSV实例处理,完全绕开了版本间的流处理差异。
如果希望彻底规避ARGF的使用,也可以直接在代码内拼接表头和文件内容,实现逻辑更清晰:
ruby -rcsv -rjson -e ' csv_content = "key1,key2\n" + File.read("file.csv") puts CSV.new(csv_content, headers: true).map(&:to_hash).to_json '
两种方案在所有主流Ruby版本下都能输出预期的JSON结果:
[{"key1":"value1","key2":"value2"}]
内容的提问来源于stack exchange,提问作者Fravadona
相关产品推荐
相关产品推荐

