我在其中一列中接收带有嵌入式JSON数据的制表符分隔文件。我的目标是拆分列,然后做一些工作来处理JSON。 当我尝试使用内置的Ruby CSV库(使用Ruby 2.2.3)时,我收到以下错误:
Illegal quoting in line 1. (CSV::MalformedCSVError)
这是一个极简主义的例子,可以帮助证明问题。以下几行正常:
puts 'red,"blue",green'.parse_csv
puts 'red,{blue},green'.parse_csv
但是这一行会产生MalformedCSVError消息:
puts 'red,{"blue"},green'.parse_csv
我知道如何解析该文件并将中间值(恰好是JSON)视为字符串文字吗?
提前感谢!
答案 0 :(得分:1)
默认情况下,双引号("
)是用于包围可能包含CSV列分隔符的字段的字符(在您的案例中为制表符)。
您可以通过将:quote_char
选项设置为其他内容来解决此问题,例如反引号或\0
。此外,对于制表符分隔的数据,您需要设置:col_sep
。
这可以为您提供您正在寻找的东西,
'red,{"blue"},green'.parse_csv(quote_char: '`')
=> ["red", "{\"blue\"}", "green"]
%Q{red\t{"blue"}\tgreen}.parse_csv(quote_char: '`', col_sep: "\t")
=> ["red", "{\"blue\"}", "green"]
请注意,如果
,这会中断:quote_char
或:quote_char
(例如,它包含反引号)。