mysql - 正确转义 JSON 特殊字符以在 CSV 文件中使用

标签 mysql json csv json.net escaping

从 Twitter 检索推文时,以下是收到的原始 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 的正斜杠周围没有反斜杠转义。 (我不确定这是否是一个大问题,如果是的话请插话)

我的困惑实际上是如何处理这些转义的控制字符。在 MySQL 客户端中对我的表运行 SELECT 查询,使用 MySQL 的 JSON_UNQUOTE function ,它将取消转义字符。 \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 表格使用。

我在查询后使用以下说明符:

INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/so.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

使用 Excel 打开 CSV 文件会显示以下内容: (第二行/条目使用 JSON_UNESCAPE 功能)

请注意第二个条目在使用 JSON_UNESCAPE 功能时如何显示过多的斜杠。

enter image description here

这是在记事本中打开的 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"

问题:我如何正确转义此处的推文,以便可以按原意阅读它? Original Tweet Link

编辑 @Michael - sqlbot 使用 ESCAPED BY '"' 的建议让我更接近了 - 但现在打开 CSV 时,推文的第二部分(URL)位于新单元格中。我已经验证这种情况在 Excel 和 Google 表格中都会发生:

enter image description here

渲染的 CSV 图像(复制和粘贴文本效果不佳) enter image description here

最佳答案

经过一番挖掘后,@Michael - sqlbot 和 this answer 得到了一些有用的评论。 ,我通过以下语句使其在 Google Sheets 和 Excel 中正常工作:

    SELECT REPLACE(JSON_UNQUOTE(JSON_EXTRACT({JSON_COL}, {JSON_PROP_TO_RETRIEVE})), '\r\n', '\n')
      ...
    INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/{FILE_NAME}.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n';

关于mysql - 正确转义 JSON 特殊字符以在 CSV 文件中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50186924/

相关文章:

php - 如何使用 Mysql 和 PHP 从重复区域单击缩略图后检索图像

mysql - MySQL 中的聚合函数 GROUP_CONCAT(expr)

c# - “JSON”未定义

javascript - map 标记点击目标错误标记

r - Google 文档导出带有逗号的电子表格值。 R 中的 read.csv() 将这些视为因素而不是数字

mysql - 表格中的重复计数

mysql - 如何在Tableview(Javafx)中仅显示mysql表的单列?

c++ - 使用 casablanca 解析 JSON 数组

python - 如果一个数据框列中包含的匹配字符串与另一个数据框列匹配,则将其置空

javascript - d3.js 条件词颜色填充wordcloud