【发布时间】:2018-10-15 15:35:20
【问题描述】:
从 Twitter 检索推文时,这里是接收到的原始 JSON 的 sn-p(通过 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 功能时如何显示过多的斜线。
这是在记事本中打开的 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 表格都会发生这种情况:
【问题讨论】:
-
你应该可以使用
JSON_UNQUOTE() ... ENCLOSED BY '"' ESCAPED BY '"' ... -
...因为 CSV 标准,例如,通过将
"加倍然后用另一组 qoutes 包装(封闭)整个字符串并添加转义指令来转义应该生成有效的 CSV。试试这个? -
@Michael-sqlbot 在这里感谢您的建议 - 它让我更接近了。当您有时间时,请在答案中查看我的编辑。
-
您的 CSV 结果不太正确。第一行很好,最后一行也很好,但是第二行根本不应该在那里,也不清楚是什么触发了……但我最好的猜测是有嵌入式 CR
\r和 LF\n,其中一个需要被淘汰。问题的根源在于SELECT ... INTO OUTFILE非常原始,而 CSV 也非常原始。REPLACE(JSON_UNQUOTE(...),'\r','')可能是诀窍。或者把\n放在这里。
标签: mysql json csv json.net escaping