При извлечении твитов из Твиттера приведен фрагмент полученного необработанного JSON (получен с помощью Fiddler:
[{"text":"\"California GOP Files FEC Complaint Over Obama Visit to Dying Grandmother\"\r\nhttp:\/\/url.com\/6jd5j5"}]
После выполнения некоторых операций над ним, включая десериализацию и повторную сериализацию (через JSON.NET ), он попадает в базу данных следующим образом:
{"text": "\"California GOP Files FEC Complaint Over Obama Visit to Dying Grandmother\"\r\nhttp://url.com/6jd5j5"}
Единственное отличие в том, что URL не имеют обратной косой черты вокруг прямой косой черты. (Я не уверен, если это важно, пожалуйста, включите, если это так)
Моя путаница на самом деле заключается в том, как обрабатывать эти экранированные управляющие символы. Запустив запрос SELECT к моей таблице в клиенте MySQL, используя функцию JSON_UNQUOTE MySQL, он удалит символы. \r\n
правильно экранирован, но он сохраняет двойные кавычки вокруг интересного текста ...
+----------+-------------------------------------------------------------------------------------------------------+
| user_id | JSON_UNQUOTE(JSON_EXTRACT(tw.tweet_json, '$.text')) |
+----------+-------------------------------------------------------------------------------------------------------+
| 12844052 | "California GOP Files FEC Complaint Over Obama Visit to Dying Grandmother"
http://url.com/6jd5j5 |
+----------+-------------------------------------------------------------------------------------------------------+
Вот как это выглядит, когда я не использую функцию JSON_UNQUOTE unescape:
+-------------------------------------------------------------------------------------------------------------+
| JSON_EXTRACT(tw.tweet_json, '$.text') |
+-------------------------------------------------------------------------------------------------------------+
| "\"California GOP Files FEC Complaint Over Obama Visit to Dying Grandmother\"\r\nhttp://url.com/6jd5j5" |
+-------------------------------------------------------------------------------------------------------------+
Мне нужно экспортировать эти твиты в файл CSV, который будет использоваться Excel или Google Sheets.
Я использую следующий спецификатор после моего запроса:
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/so.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
Открытие CSV-файла в Excel отображает следующее:
(Вторая строка / запись использует функцию JSON_UNESCAPE)
Обратите внимание, что вторая запись, при использовании функции JSON_UNESCAPE, показывает чрезмерную косую черту.
Вот файл CSV, открытый в блокноте:
"\"\\\"California GOP Files FEC Complaint Over Obama Visit to Dying Grandmother\\\"\\r\\nhttp://url.com/6jd5j5\""
"\"California GOP Files FEC Complaint Over Obama Visit to Dying Grandmother\"
\
http://url.com/6jd5j5"
Вопрос: Как я могу правильно избежать твита здесь, чтобы он мог быть прочитан так, как задумано? Оригинал Tweet Link
Редактировать
Советы по использованию ESCAPED BY '"'
из @ Michael - sqlbot приблизили меня - но теперь при открытии CSV вторая часть твита (URL) находится в новой ячейке. Я подтвердил, что это происходит как в Excel, так и в Google Sheets:
Рендеринг CSV-изображения (копирование и вставка текста не работает хорошо)