首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python一技:json.load() vs json.loads()

Python一技:json.load() vs json.loads()

作者头像
数据科学工厂
发布2023-02-27 12:48:44
发布2023-02-27 12:48:44
3.8K0
举报

导读

本文[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()

代码语言:javascript
复制
json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

loads()

代码语言:javascript
复制
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

  • 读取代码
代码语言:javascript
复制
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")
  • 结果
代码语言:javascript
复制
Started Reading `JSON` file
Converting `JSON` encoded data into Python dictionary

Decoded `JSON` Data From File
name : jane doe
salary : 9000
skills : ['Raspberry pi', 'Machine Learning', 'Web Development']
email : JaneDoe@pynative.com
projects : ['Python Data Mining', 'Python Data Science']

Done reading json file

key

如果您想直接访问 JSON key 而不是从文件中迭代整个 JSON,使用以下代码

代码语言:javascript
复制
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")
  • 结果
代码语言:javascript
复制
Started Reading `JSON` file
Converting `JSON` encoded data into Python dictionary

Decoding `JSON` Data From File
Printing `JSON` values using key

jane doe
9000
['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 字典。

例子

  • 参考如下
代码语言:javascript
复制
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")
  • 结果
代码语言:javascript
复制
Started converting `JSON` string document to Python dictionary

Printing key and value
jane doe
9000
['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 数据:

代码语言:javascript
复制
developerInfo = """{
    "id": 23,
    "name": "jane doe",
    "salary": 9000,
    "email": "JaneDoe@pynative.com",
    "experience": {"python":5, "data Science":2},
    "projectinfo": [{"id":100, "name":"Data Mining"}]
}
"""
  • 嵌套解析参考如下
代码语言:javascript
复制
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")
  • 结果
代码语言:javascript
复制
Started reading nested `JSON` array
Project name:  Data Mining
Experience:  5
Done reading nested `JSON` Array

有序字典

  • JSON 解析为 OrderedDict

正如我们上面讨论的那样,json.load() 方法的 object_pairs_hook 参数是一个可选函数,它将使用任何对象文字的结果调用,并使用有序的对列表进行解码。

  • 参考如下
代码语言:javascript
复制
import json
from 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)
  • 结果
代码语言:javascript
复制
Ordering keys
Type:  <class 'collections.OrderedDict'>
OrderedDict([('John', 1), ('Emma', 2), ('Ault', 3), ('Brian', 4)])

类型

假设 JSON 文档包含许多浮点值,并且您希望将所有浮点值四舍五入到两位小数。在这种情况下,我们需要定义一个自定义函数来执行您想要的任何舍入。我们可以将这样的函数传递给 parse_float kwarg。当然 parse_int kwarg 也是如此。

  • 参考如下
代码语言:javascript
复制
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")
  • 结果
代码语言:javascript
复制
Load float and int values from `JSON` and manipulate it
Started Reading `JSON` file
Salary:  9250.542
<class 'float'>
Salary to deduct:  3
Done reading a `JSON` file

参考资料

[1]

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冷冻工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 语法
    • load()
    • loads()
    • 参数
  • json.load
    • 例子
    • key
  • json.loads
    • 例子
  • 嵌套
  • 有序字典
  • 类型
    • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档