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