python-知识讲解-json模块的load/loads方法实战及参数详解
1. loads方法与load方法的异同
在Python中json是一个非常常用的模块,这个主要有4个方法:
json.dumps
json.dump
json.loads
json.load
这里主要分析讲解一下json的loads和load方法。
这两个方法中都是把其他类型的对象转为Python对象,这里先说明一下Python对象,
Python对象包括:
所有Python基本数据类型,列表,元组,字典,自己定义的类,等等等等,当然不包括Python的字符串类型,把字符串或者文件鎏中的字符串转为字符串会报错的
1.1不相同点:
loads操作的是字符串
load操作的是文件流
1.2 相同点
除了第一个参数(要转换的对象)类型不同,其他所有的参数都相同
最终都是转换成Python对象
1.3 例子
先来一个例子,除了要转换的对象,其他什么参数都不传:
s = '{"name": "wade", "age": 54, "gender": "man"}'
# json.loads读取字符串并转为Python对象
print("json.loads将字符串转为Python对象: type(json.loads(s)) = {}".format(type(json.loads(s))))
print("json.loads将字符串转为Python对象: json.loads(s) = {}".format(json.loads(s)))
# json.load读取文件并将文件内容转为Python对象
# 数据文件要s.json的内容 --> {"name": "wade", "age": 54, "gender": "man"}
with open('s.json', 'r') as f:
s1 = json.load(f)
print("json.load将文件内容转为Python对象: type(json.load(f)) = {}".format(type(s1)))
print("json.load将文件内容转为Python对象: json.load(f) = {}".format(s1))
1
2
3
4
5
6
7
8
9
10
11
2. 转换成Python对象
由于loads和load两个方法只是处理的数据源不同,其他的参数都是相同的,返回的结果类型也相同,故这是loads和load方法两个只说一个,
日常工作中最常见的就是把字符串通过json.loads转为字典,其实json的loads方法不仅可以把字符串转为字典,还可以转为任何Python对象。
比如说,转成python基本数据类型:
print('json.loads 将整数类型的字符串转为int类型: type(json.loads("123456"))) --> {}'.format(type(json.loads("123456"))))
print('json.loads 将浮点类型的字符串转为float类型: type(json.loads("123.456")) --> {}'.format(type(json.loads("123.456"))))
print('json.loads 将boolean类型的字符串转为bool类型: type(json.loads("true")) --> {}'.format((type(json.loads("true")))))
print('json.loads 将列表类型的字符串转为列表: type(json.loads(\'["a", "b", "c"]\')) --> {}'.format(type(json.loads('["a", "b", "c"]'))))
print('json.loads 将字典类型的字符串转为字典: type(json.loads(\'{"a": 1, "b": 1.2, "c": true, "d": "ddd"}\')) --> %s' % str(type(json.loads('{"a": 1, "b": 1.2, "c": true, "d": "ddd"}'))))
1
2
3
4
5
json模块会根据你的字符串自动转为最符合的数据类型,
但是需要注意的是不能把转为字符串,否则会报json.decoder.JSONDecodeError错误:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
————————————————
版权声明:本文为CSDN博主「荒野雄兵」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/daerzei/article/details/100598901