Ruby 从CSV文件解析嵌入的JSON

Ruby 从CSV文件解析嵌入的JSON,ruby,csv,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_cs

我在其中一列中接收到带有嵌入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
但此行会生成格式不正确的DCSVERROR消息:

puts 'red,{"blue"},green'.parse_csv
知道如何解析该文件并将中间值(恰好是JSON)作为字符串文本处理吗

提前谢谢

默认情况下,双引号(
)是用于环绕可能包含CSV列分隔符(在您的案例中为制表符)的字段的字符

您可以通过将
:quote\u char
选项设置为其他选项来解决此问题,例如backticks或
\0
。此外,对于制表符分隔的数据,您需要设置
:col\u sep

这会给你你想要的东西

'red,{“blue”},green'.parse_csv(引用字符:'`'))
=>[“红色”、“蓝色”、“绿色”]
%Q{red\t{“blue”}\tgreen}.parse_csv(引用字符:'`',列sep:“\t”)
=>[“红色”、“蓝色”、“绿色”]
请注意,如果

  • JSON列包含制表符,不被
    :quote_char
  • JSON数据包含
    :quote_char
    (例如,它包含反勾号)

您说您正在接收带有内置JSON的制表符分隔的文件,但您所展示的示例是逗号分隔的字符串,没有(有效)JSON。请编辑您的问题,以包含您的输入数据的真实示例以及您正在处理它的实际代码。感谢您的回答。嵌入的JSON不是特定于错误的。任何在双引号旁边带有花括号的列数据都会导致相同的错误。这就是为什么我提供了一个产生相同错误的最低限度示例。