数据小站
数据科学成长之路

python3中json模块

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中的编码问题
赞(0) 打赏
未经允许不得转载:技术文档分享 » python3中json模块

评论 抢沙发