Python编码

Json

Python在处理Json文件的过程经常会出现编码问题,在此做一个整理记录。

json.loads(str)

在读文件解析json时可能会出现

JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

此时需要排查载入的内容是否是函数可接受的类型。

json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, 
parse_constant=None, object_pairs_hook=None, **kw)

s: str, bytes or bytearray
然后检差内容是否是可解析的,例如是否为Unicode编码,键是不是使用的双引号;

string = line.strip()
#去除u前缀
string = string.replace("u'", "'")
#将单引号替换成双引号
string = string.replace("'", '"')
target_dict = json.loads(string, encoding='utf-8')
#若含中文:
target_dict = json.loads(string.encode().decode('utf-8-sig'))

json.dump

当json文件写入时打开文件最好使用codecs 或者 with open 的方式打开,而不是直接open,直接open在次解析文件json.loads可能会报错。

fobj = codecs.open(save_file, 'w', encoding="utf-8")
json.dump(res, fobj, indent=4, ensure_ascii=False)

with open(save_file, 'wb') as f:
    json.dump(res, f, indent=4, ensure_ascii=False)

Reference

Python文档
https://stackoverflow.com/questions/956867/how-to-get-string-objects-instead-of-unicode-from-json

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 几个基本概念 bit二进制位, 是计算机内部数据储存的最小单位,11010100是一个8位二进制数。一个二进制位只...
    西电大侠阅读 3,601评论 1 8
  • 字符串类型是对人类友好的符号,但计算机只认识一种符号,那就是二进制(binary)数,或者说是数字。为了用计算机可...
    苏糊阅读 1,380评论 0 0
  • 继上一篇文章字符集和编码详解总结了常见字符编码后,这篇文章会对python中常见的编码问题进行分析和总结。由于py...
    __七把刀__阅读 2,914评论 0 6
  • python 中的unicode是让人很困惑、比较难以理解的问题.这篇文章写的比较好,utf-8是 unicode...
    think_lonely阅读 934评论 0 0
  • python 中的 unicode是让人很困惑、比较难以理解的问题. 这篇文章 写的比较好,utf-8是 unic...
    hxzqlh阅读 124,954评论 5 44