json导出中文乱码?数据转义为Unicode编码格式的处理方法

json导出中文乱码?数据转义为Unicode编码格式的处理方法

JSON中文转义示例

先来看下下面这段JSON数据的输出结果:

import json
jsdata = {'title':'中文标题' , 'description': '文章内容描述'}
json.dumps(jsdata)
json.dumps(jsdata, ensure_ascii=False)

执行结果:

'{"title": "\\u4e2d\\u6587\\u6807\\u9898", "description": "\\u6587\\u7ae0\\u5185\\u5bb9\\u63cf\\u8ff0"}'
'{"title": "中文标题", "description": "文章内容描述"}'

关于 ensure_ascii 参数说明

ensure_ascii 这个参数默认值为True,如果 ensure_ascii 是 true (即默认值),输出保证将所有输入的非 ASCII 字符转义。如果 ensure_ascii 是 false,这些字符会原样输出。

同理, 在很多与非ASCII字符数据进行JSON格式输出时如果设置参数ensure_asciiFalse时,输出内容都会进行转义处理。

例如在scrapy中使用命令行-o file.json 输出JSON格式数据时,默认情况也是将中文进行转义处理,正确的做法是在pipelines.py文件中重载编写一下 JSON导出类JsonItemExporter的处理方法:

from scrapy.exporters import JsonLinesItemExporter
from scrapy.exporters import JsonItemExporter

class MyJsonLinesItemExporter(JsonLinesItemExporter):
    def __init__(self, file, **kwargs):
        super(MyJsonLinesItemExporter, self).__init__(file, ensure_ascii=False, **kwargs)

class MyJsonItemExporter(JsonItemExporter):
    def __init__(self, file, **kwargs):
        super(MyJsonItemExporter, self).__init__(file, ensure_ascii=False, **kwargs)

编写好后,需要在settings.py文件中配置一下:

#settings.py
FEED_EXPORTERS = {
  'jl': 'tutorial.pipelines.MyJsonLinesItemExporter',
  'json': 'tutorial.pipelines.MyJsonItemExporter',
}

就这样,重新执行一次spider,导出JSON数据的中文保存为UTF-8文件格式了。

转载本文时请注明出处及本文链接地址json导出中文乱码?数据转义为Unicode编码格式的处理方法

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注