当我们在Python中使用dict存储中文字符时,常常会遇到dumps()的问题。下面给出关于Python dict存中文字符dumps()的完整攻略:
问题描述
在Python中,使用json.dumps()将dict序列化成json字符串时,中文字符会被默认转义。
例如,将以下字典结构:
my_dict = {"name": "张三", "age": 18}
序列化成json字符串时,默认会将中文字符"张三"
转义成\u5f20\u4e09
:
import json
json.dumps(my_dict)
# '{"name": "\\u5f20\\u4e09", "age": 18}'
这种情况下,很难直观地看到原始字符串,进而影响使用体验和编写代码效率。
解决方案
解决方案有两种:
方案一
使用ensure_ascii参数设置为False,可以禁止将中文字符转义:
import json
json.dumps(my_dict, ensure_ascii=False)
# '{"name": "张三", "age": 18}'
此时,中文字符就可以直接展示了,不再被转义。
方案二
继承json.JSONEncoder
类,实现自己的编码器,覆写default()方法。
import json
class MyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, str):
return obj.encode('utf-8').decode('unicode_escape')
return json.JSONEncoder.default(self, obj)
my_dict = {"name": "张三", "age": 18}
json.dumps(my_dict, cls=MyEncoder)
# '{"name": "张三", "age": 18}'
这样,我们就可以直接看到原始的中文字符了。
示例说明
以方案一为例,以下为示例说明:
import json
# 字典中包含中文字符
my_dict = {"name": "张三", "age": 18}
# 默认情况下中文字符会被转义
print(json.dumps(my_dict)) # 输出为 '{"name": "\\u5f20\\u4e09", "age": 18}'
# 设置ensure_ascii参数为False,可以禁止转义中文字符
print(json.dumps(my_dict, ensure_ascii=False)) # 输出为 '{"name": "张三", "age": 18}'
输出结果:
{"name": "\u5f20\u4e09", "age": 18}
{"name": "张三", "age": 18}
第一个输出结果是默认的序列化结果,第二个输出结果是禁止转义中文字符的序列化结果。
参考链接:
- Python3中关于json.dumps()存中文字符问题的解释
- python中json.dumps()序列化中文字符问题解决方法(json.dump(obj, file, ensure_ascii=False))
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于Python dict存中文字符dumps()的问题 - Python技术站