日学壹技:json.load() vs json.loads()
导读
本文[1]演示如何使用 Python
的 json.load()
和 json.loads()
方法从文件和字符串中读取 JSON
数据。使用 json.load()
和 json.loads()
方法,您可以将 JSON
格式的数据转换为 Python 类型,这个过程称为 JSON
解析。Python 内置模块 json 提供了以下两种解析 JSON
数据的方法。
要从 URL 或文件解析 JSON
,请使用 json.load()
。要解析包含 JSON
内容的字符串,请使用 json.loads()
。
![](/assets/blank.gif)
JSON
parsing语法
我们可以使用 load
和 loads()
方法进行许多 JSON
解析操作。首先,了解它的语法和参数,然后我们逐一介绍它的用法。
load()
json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
loads()
json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
参数
所有参数在两种方法中具有相同的含义。
json.load()
用于从文件中读取 JSON
文档,json.loads()
用于将 JSON
字符串文档转换为 Python 字典。
fp
用于读取文本文件、二进制文件或 JSON
文件的文件指针。
object_hook
是可选函数,将使用任何对象文字解码的结果调用。
object_pairs_hook
是一个可选函数,将使用任何对象文字的结果调用,该对象文字是用有序的对列表解码的。
parse_float
是可选参数,但如果指定,将使用要解码的每个 JSON
浮点数和整数的字符串调用。
parse_int
如果指定,它将使用要解码的每个 JSON
int 的字符串调用。默认情况下,这等同于 int(num_str)。
json.load
json.load()
从文件中读取 JSON
数据并将其转换为字典。使用 json.load()
方法,我们可以从文本、JSON
或二进制文件中读取 JSON
数据。 json.load()
方法以 Python 字典的形式返回数据。然后我们使用这个字典来访问和操作我们的应用程序或系统中的数据。
json.load()
和 json.loads()
方法在解码时使用转换表,参考如下
解析转换表
JSON
|
Python |
---|---|
object | dict |
array | list |
string | str |
number (int) | int |
number (real) | float |
true | True |
false | False |
null | None |
例子
现在,我正在读取硬盘上的“developer.json”文件。此文件包含以下 JSON
数据。
![](/assets/blank.gif)
读取代码
import json
print("Started Reading `JSON` file")with open("developer.json", "r") as read_file: print("Converting `JSON` encoded data into Python dictionary") developer = json.load(read_file)
print("Decoded `JSON` Data From File") for key, value in developer.items(): print(key, ":", value) print("Done reading json file")
结果
Started Reading `JSON` fileConverting `JSON` encoded data into Python dictionary
Decoded `JSON` Data From Filename : jane doesalary : 9000skills : ['Raspberry pi', 'Machine Learning', 'Web Development']email : JaneDoe@pynative.comprojects : ['Python Data Mining', 'Python Data Science']
Done reading json file
key
如果您想直接访问 JSON
key 而不是从文件中迭代整个 JSON
,使用以下代码
import json
print("Started Reading `JSON` file")with open("developer.json", "r") as read_file: print("Converting `JSON` encoded data into Python dictionary") developer = json.load(read_file)
print("Decoding `JSON` Data From File") print("Printing `JSON` values using key") print(developer["name"]) print(developer["salary"]) print(developer["skills"]) print(developer["email"]) print("Done reading json file")
结果
Started Reading `JSON` fileConverting `JSON` encoded data into Python dictionary
Decoding `JSON` Data From FilePrinting `JSON` values using key
jane doe9000['Raspberry pi', 'Machine Learning', 'Web Development']JaneDoe@pynative.com
Done reading json file
json.loads
json.loads()
将 JSON
字符串转换为字典。有时我们会收到字符串格式的 JSON
数据。所以要在我们的应用程序中使用它,需要将 JSON
字符串转换为 Python 字典。使用 json.loads()
方法,我们可以将包含 JSON
文档的原生字符串、字节或字节数组实例反序列化为 Python 字典。
例子
参考如下
import json
developerJsonString = """{ "name": "jane doe", "salary": 9000, "skills": [ "Raspberry pi", "Machine Learning", "Web Development" ], "email": "JaneDoe@pynative.com", "projects": [ "Python Data Mining", "Python Data Science" ]}"""
print("Started converting `JSON` string document to Python dictionary")developerDict = json.loads(developerJsonString)
print("Printing key and value")print(developerDict["name"])print(developerDict["salary"])print(developerDict["skills"])print(developerDict["email"])print(developerDict["projects"])
print("Done converting `JSON` string document to a dictionary")
结果
Started converting `JSON` string document to Python dictionary
Printing key and valuejane doe9000['Raspberry pi', 'Machine Learning', 'Web Development']JaneDoe@pynative.com['Python Data Mining', 'Python Data Science']
Done converting `JSON` string document to a dictionary
嵌套
解析和检索嵌套的 JSON
键值。
假设您有一个如下所示的 JSON
数据:
developerInfo = """{ "id": 23, "name": "jane doe", "salary": 9000, "email": "JaneDoe@pynative.com", "experience": {"python":5, "data Science":2}, "projectinfo": [{"id":100, "name":"Data Mining"}]}"""
嵌套解析参考如下
import json
print("Started reading nested `JSON` array")developerDict = json.loads(developerInfo)
print("Project name: ", developerDict["projectinfo"][0]["name"])print("Experience: ", developerDict["experience"]["python"])
print("Done reading nested `JSON` Array")
结果
Started reading nested `JSON` arrayProject name: Data MiningExperience: 5Done reading nested `JSON` Array
有序字典
将 JSON
解析为 OrderedDict
正如我们上面讨论的那样,json.load()
方法的 object_pairs_hook 参数是一个可选函数,它将使用任何对象文字的结果调用,并使用有序的对列表进行解码。
参考如下
import jsonfrom collections import OrderedDict
print("Ordering keys")OrderedData = json.loads('{"John":1, "Emma": 2, "Ault": 3, "Brian": 4}', object_pairs_hook=OrderedDict)print("Type: ", type((OrderedData)))print(OrderedData)
结果
Ordering keysType: <class 'collections.OrderedDict'>OrderedDict([('John', 1), ('Emma', 2), ('Ault', 3), ('Brian', 4)])
类型
假设 JSON
文档包含许多浮点值,并且您希望将所有浮点值四舍五入到两位小数。在这种情况下,我们需要定义一个自定义函数来执行您想要的任何舍入。我们可以将这样的函数传递给 parse_float kwarg。当然 parse_int kwarg 也是如此。
参考如下
import json
def roundFloats(salary): return round(float(salary), 2)
def salartToDeduct(leaveDays): salaryPerDay = 465 return int(leaveDays) * salaryPerDay
print("Load float and int values from `JSON` and manipulate it")print("Started Reading `JSON` file")with open("developerDetails.json", "r") as read_file: developer = json.load(read_file, parse_float=roundFloats, parse_int=salartToDeduct) # after parse_float print("Salary: ", developer["salary"])
# after parse_int print("Salary to deduct: ", developer["leavedays"]) print("Done reading a `JSON` file")
结果
Load float and int values from `JSON` and manipulate itStarted Reading `JSON` fileSalary: 9250.542<class 'float'>Salary to deduct: 3Done reading a `JSON` file
参考资料
Source: https://pynative.com/python-json-load-and-loads-to-parse-json/
本文由 mdnice 多平台发布
日学壹技:json.load() vs json.loads()相关推荐
- Python日学壹技:性能分析
导读 相信日常使用Python作为生产力的读者,一定会存在想要分析代码中每一行的运行时间与变量占用内存大小的需求,本文主要分析两个模块,用于分析每行代码的内存使用情况和运行时间情况. 内存使用 mem ...
- 日常小记录json文件(json.load()、json.loads()、json.dump()、json.dumps())
使用模型预测图片文件时,为了加快速度,早点得到预测结果,可以将预测图片分成多份多开几个命令窗口进行预测. 具体的处理方法是: ①读取需预测图片文件列表, ②把列表分成多份写入多个json文件 ③预测时 ...
- python中json.load()、json.loads()、json.dump()、json.dumps()的区别
json.load()从文件中读取json字符串 json.loads()将json字符串转换为字典类型 json.dumps()将python中的字典类型转换为字符串类型 json.dump()将j ...
- Python 中的json.load() 和json.loads()
1 函数的作用 json.loads() : 解析一个有效的 JSON 字符串并将其转换为 python 字典 json.loads() 操作的是字符串 json.load() : 读取一个 JSON ...
- python处理大数据量json数据的方法_python-利用json模块处理json数据几个函数总结...
1.前言 json是一种轻量级的数据交换格式,它是JavaScript的子集,易于人阅读和编写. 前端和后端进行数据交互,其实就是JS和Python进行数据交互. 接口间或者前后端间的语言不一致,不同 ...
- python:Json模块dumps、loads、dump、load介绍
20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...
- Json模块dumps、loads、dump、load函数介绍
转自:http://blog.csdn.net/mr_evanchen/article/details/77879967 Json模块dumps.loads.dump.load函数介绍 1.json. ...
- python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分
一.概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()将字典转化为字符串 (2)json.load ...
- json.dumps与json.dump的区别 json.loads与json.load的区别(简洁易懂)
json.dumps是将一个Python数据类型列表进行json格式的编码解析, 示例如下: >>> import json #导入python 中的json模块 >>& ...
最新文章
- 怎么用python读取csv文件、并且是读取行-使用python获取csv文本的某行或某列数据的实例...
- 【组合数学】递推方程 ( 非齐次部分是 指数函数 且 底是特征根 | 求特解示例 )
- 家里“娘娘”发钱,臣不得不遵命呀
- JDK源码 - BitSet的实现
- 设计素材模板|艺术感中国风海报
- 编写c语言程序的可视化编程环境有哪些,C语言可视化编程环境设计及实现.pdf
- Node.js:中间件——express简单的设置用户表单提交数据的接收中间件
- 如何让内容页调用样式表?
- Linux配置并编译内核
- HttpSession基础
- 电脑截gif动图软件
- 四层协议和七层协议详解
- vue 登录页qq快速登录功能
- IJCAI 2021 投稿安排出来了!新审稿机制体验一下?
- 将格林尼治时间转日期格式
- DAOS ARM64调测之旅
- 赛尔号眼球怎么抓_素描头像怎么画?素描入门基础画|自学素描基本入门教程...
- 少儿编程是智商税吗?不花钱让孩子赢在起跑线
- boost中regex使用时出现的问题
- 打造前端 Deepin Linux 工作环境——安装系统