2015-12-16 3 views
0

Я получаю файлы с разделителями табуляции со встроенными данными JSON в одном из столбцов. Моя цель - разделить столбцы, а затем выполнить некоторую работу по обработке JSON. Когда я пытаюсь использовать встроенный в Рубине библиотеку CSV (с Руби 2.2.3) Я получаю следующее сообщение об ошибке:Разбор встроенного JSON из файла CSV

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

Вы говорите, что получаете файлы с разделителями-запятыми со встроенным JSON в них, но примеры, которые вы указали, представляют собой строки с разделителями-запятыми без (действительного) JSON. Измените свой вопрос, чтобы включить реальный пример ваших входных данных и фактического кода, с которым вы его обрабатываете. –

+0

Спасибо, что ответили. Встроенный JSON не является специфическим для ошибки. Любые данные столбца с фигурными скобками рядом с двойными кавычками вызывают одну и ту же ошибку. Вот почему я представил минималистский пример, который дает ту же ошибку. – pdxdev

ответ

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 или
  • The JSON данные содержат :quote_char (например, он содержит обратную сторону).
+0

quote_char: ''' работал как шарм. Благодаря! – pdxdev

Смежные вопросы