json中有四个方法,load,loads,dump,dumps
load/loads加载,将字符串/文件转换为字典类型
json.loads(s) 参数s:must be str, bytes or bytearray,必须为字符串或字节,当为字节时,必须是utf8编码
字符串形式
f = r"C:\Users\chenyibin\Desktop\cusp_gn" with open(f,'r')as reader: text = reader.read() data = json.loads(text) print(type(data)) 打印结果 > class 'dict'
字节流时:当字节流是gbk时,直接使用loads会提示解码错误
with open(f,'r')as reader: #虽然我们自己不会人为手工编码自找麻烦,但是在网络传输时,编码情况还是会存在 text = reader.read().encode('gbk') data = json.loads(text) print(type(data)) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 38: invalid start byte #当字节流为gbk编码时,需要对字节流进行解码 data = json.loads(text.decode('gbk')) print(type(data)) 打印结果 > class 'dict'
字节流为utf8时,json可以自动解析,当做字符串一样处理
with open(f,'r')as reader: text = reader.read().encode('utf8') data = json.loads(text) print(type(data)) 打印结果 > class 'dict'
json.load(fp) 参数fp:文件 ,load可以直接加载文件类型数据,转换为dict
with open(f,'r')as reader: data = json.load(reader) print(type(data)) 打印结果 > class 'dict'
编码问题,在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。 不同 ANSI 编码之间互不兼容 。不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、Big5、Shift_JIS 等各自的编码标准。这些使用 1 至 4 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。
处理文本时需要注意编码问题。
浅谈python3中的编码问题