从CSV文件中解析嵌入式JSON

时间:2015-12-16 22:34:15

标签: ruby csv

我在其中一列中接收带有嵌入式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)视为字符串文字吗?

提前感谢!

1 个答案:

答案 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"]

请注意,如果

,这会中断
  • JSON列包含标签,但未被:quote_char
  • 包围
  • JSON数据包含:quote_char(例如,它包含反引号)。