导读

本文[1]演示如何使用 Pythonjson.load()json.loads() 方法从文件和字符串中读取 JSON 数据。使用 json.load()json.loads() 方法,您可以将 JSON 格式的数据转换为 Python 类型,这个过程称为 JSON 解析。Python 内置模块 json 提供了以下两种解析 JSON 数据的方法。

要从 URL 或文件解析 JSON,请使用 json.load()。要解析包含 JSON 内容的字符串,请使用 json.loads()

JSON parsing

语法

我们可以使用 loadloads() 方法进行许多 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 数据。

developer.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("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

参考资料

[1]

Source: https://pynative.com/python-json-load-and-loads-to-parse-json/

本文由 mdnice 多平台发布

日学壹技:json.load() vs json.loads()相关推荐

  1. Python日学壹技:性能分析

    导读 相信日常使用Python作为生产力的读者,一定会存在想要分析代码中每一行的运行时间与变量占用内存大小的需求,本文主要分析两个模块,用于分析每行代码的内存使用情况和运行时间情况. 内存使用 mem ...

  2. 日常小记录json文件(json.load()、json.loads()、json.dump()、json.dumps())

    使用模型预测图片文件时,为了加快速度,早点得到预测结果,可以将预测图片分成多份多开几个命令窗口进行预测. 具体的处理方法是: ①读取需预测图片文件列表, ②把列表分成多份写入多个json文件 ③预测时 ...

  3. python中json.load()、json.loads()、json.dump()、json.dumps()的区别

    json.load()从文件中读取json字符串 json.loads()将json字符串转换为字典类型 json.dumps()将python中的字典类型转换为字符串类型 json.dump()将j ...

  4. Python 中的json.load() 和json.loads()

    1 函数的作用 json.loads() : 解析一个有效的 JSON 字符串并将其转换为 python 字典 json.loads() 操作的是字符串 json.load() : 读取一个 JSON ...

  5. python处理大数据量json数据的方法_python-利用json模块处理json数据几个函数总结...

    1.前言 json是一种轻量级的数据交换格式,它是JavaScript的子集,易于人阅读和编写. 前端和后端进行数据交互,其实就是JS和Python进行数据交互. 接口间或者前后端间的语言不一致,不同 ...

  6. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

  7. Json模块dumps、loads、dump、load函数介绍

    转自:http://blog.csdn.net/mr_evanchen/article/details/77879967 Json模块dumps.loads.dump.load函数介绍 1.json. ...

  8. python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分

    一.概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()将字典转化为字符串 (2)json.load ...

  9. json.dumps与json.dump的区别 json.loads与json.load的区别(简洁易懂)

    json.dumps是将一个Python数据类型列表进行json格式的编码解析, 示例如下: >>> import json #导入python 中的json模块 >>& ...

最新文章

  1. 怎么用python读取csv文件、并且是读取行-使用python获取csv文本的某行或某列数据的实例...
  2. 【组合数学】递推方程 ( 非齐次部分是 指数函数 且 底是特征根 | 求特解示例 )
  3. 家里“娘娘”发钱,臣不得不遵命呀
  4. JDK源码 - BitSet的实现
  5. 设计素材模板|艺术感中国风海报
  6. 编写c语言程序的可视化编程环境有哪些,C语言可视化编程环境设计及实现.pdf
  7. Node.js:中间件——express简单的设置用户表单提交数据的接收中间件
  8. 如何让内容页调用样式表?
  9. Linux配置并编译内核
  10. HttpSession基础
  11. 电脑截gif动图软件
  12. 四层协议和七层协议详解
  13. vue 登录页qq快速登录功能
  14. IJCAI 2021 投稿安排出来了!新审稿机制体验一下?
  15. 将格林尼治时间转日期格式
  16. DAOS ARM64调测之旅
  17. 赛尔号眼球怎么抓_素描头像怎么画?素描入门基础画|自学素描基本入门教程...
  18. 少儿编程是智商税吗?不花钱让孩子赢在起跑线
  19. boost中regex使用时出现的问题
  20. 打造前端 Deepin Linux 工作环境——安装系统

热门文章

  1. 「一出好戏」带给我的启示录
  2. 64进制(base64)
  3. Vant Weapp踩过的坑
  4. 公有云发展的四大趋势
  5. 继妹变继母,儿子与自己断绝关系,世界首富马斯克,为何这么惨?
  6. 小米怎么快速回到顶部_Mac电脑怎么快速回到桌面
  7. 被领导夸的时候,怎么回应?
  8. 【JAVA】-- setBorder
  9. java传递枚举值到JNI
  10. 申请永久免费的域名SSL证书的方法