python中的 json 库可以很方便地将字典对象写入到文件中,或者从文件中直接读取成为字典对象。
但是如果字典中有中文数据(或者其它 非ascii字符),写入的时候会被强行转义,比如下面的代码:
import json
dict_zh = {
'键': '值',
'多重字典': {
'name': 'can',
'city': 'Canton'
}
}
with open("json/test.json", 'w+') as f1:
json.dump(dict_zh, f1)
写入到test.json文件的实际内容会是这样的:
{"\u952e": "\u503c", "\u591a\u91cd\u5b57\u5178": {"name": "can", "city": "Canton"}}
其中的中文字符都被转义了,转义方式等同于:
print("键".encode("unicode_escape"))
上面这行的输出为:
b'\\u952e'
如果继续用 json.load(file_object) 从上面的 test.json 读取,也是能读出来正确的中文字符的。毕竟不是 python 不支持中文,只是 json.dump 这个方法默认把中文转义再输出了而已。
而要关闭这个转义,也只要在使用 json.dump 的时候,指定一个关键词参数 就可以。
json.
dump
(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
其中的 ensure_ascii 默认为 True,表示会将所有输入的非 ASCII 字符转义。只要改成 False 就可以。于是代码更改为如下:
import json
dict_zh = {
'键': '值',
'多重字典': {
'name': 'can',
'city': 'Canton'
}
}
with open("json/test.json", 'w+') as f1:
json.dump(dict_zh, f1, ensure_ascii=False)
运行结果,test.json 的内容变成:
{"键": "值", "多重字典": {"name": "can", "city": "Canton"}}
OK,搞定。
版权声明:本文为Yibans原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。