代码之家  ›  专栏  ›  技术社区  ›  contactmatt

正确转义CSV文件中使用的JSON特殊字符

  •  0
  • contactmatt  · 技术社区  · 7 年前

    从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的 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\u 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\U UNESCAPE特性)

    请注意,第二个条目在使用JSON\u 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

    编辑 使用建议 ESCAPED BY '"' 从…起 @Michael-sqlbot 让我更接近了——但现在打开CSV时,推特的第二部分(URL)位于新的单元格中。我已经在Excel和Google工作表中验证了这一点:

    enter image description here

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   contactmatt    7 年前

    在深入研究之后,@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';