JSON 模块
大家好!这个章节我们将介绍 Python 中的 json 模块。json 是一种轻量级的数据交换格式,它被广泛用于在不同应用程序和系统之间传递数据。想象一下,像你和朋友用短信交换消息,短信中的文字就是我们传递的“数据”,而 json 就像是它的标准格式,确保你和朋友都能理解彼此的消息内容。
简介
JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式,用于在不同应用程序之间传输和存储数据。
它以文本形式表示结构化数据,易于理解和编写,同时也易于计算机解析和生成。
JSON(JavaScript Object Notation,简写为 JS 对象表示法)是一种轻量级的数据交换格式。它以文本形式表示结构化数据,易于理解和编写,同时也容易被计算机解析和生成。就像你用纸笔记录下朋友的联系信息,JSON 就是通过文本形式传递这些数据的方式。
JSON 的结构规则
对象:用花括号{}包裹,包含一系列键值对,每个键值对之间用逗号,分隔。数组:用方括号[]包裹,包含一系列值,每个值之间用逗号,分隔。键值对:键和值之间使用冒号:分隔,键必须是字符串,值可以是字符串、数字、布尔值、对象、数组、或null- JSON数据的最外层只能是数组或对象
- JSON中的字符串,必须使用双引号包含
{
"name": "John",
"age": 30,
"is_student": false,
"address": {
"city": "New York",
"zip": "10001"
},
"hobbies": ["reading", "swimming", "traveling"]
}
JSON 的数据结构其实非常简单。它的核心元素包括对象、数组、键值对、字符串等。举个例子,如果你要表示一个人的信息,可以用对象(即用花括号 {} 包裹)来存储多个键值对。每个键值对由键(key)和对应的值(value)组成,键必须是字符串,值可以是多种类型。这里,name 和 age 是键,它们的值分别是字符串 "John" 和整数 30。另外,address 是一个嵌套的对象,hobbies 是一个数组,存储了多个爱好。
Python 与 JSON 数据类型对应
| Python | JSON |
|---|---|
| dict | object |
| list, tuple | array |
| str | string |
| int, float | number |
| True | true |
| Flase | false |
| None | null |
JSON 中的结构和 Python 的数据结构非常相似。你可以把它们对应起来,理解起来更容易。例如,Python 中的字典(dict)对应 JSON 中的对象(object),Python 中的列表(list)对应 JSON 中的数组(array),而布尔值 True 和 False 则分别对应 JSON 中的 true 和 false。
JSON 序列化与反序列化
JSON 的序列化指的是将 Python 对象转换为 JSON 格式的字符串。
通过序列化,Python 对象可以被编码为符合 JSON 规范的字符串,从而可以在不同的应用程序、平台或语言之间进行数据交换。
对于 JSON 有两个核心的操作:序列化和反序列化。序列化是将 Python 对象转换为 JSON 格式的字符串,方便存储或传输。反序列化是将 JSON 格式的字符串解析回 Python 对象,方便后续操作。举个例子,当你想把 Python 中的字典数据保存为 JSON 格式时,就需要使用序列化,而当你从 JSON 文件或字符串中读取数据并转换为 Python 对象时,就是反序列化。
json.dumps():可以完成序列化的操作。这个函数将 Python 的数据结构转换为 JSON 格式的字符串。
import json
# 定义一个Python字典
data = {
"name": "Alice",
"age": 30,
"city": "New York"
}
# 将Python字典序列化为JSON格式的字符串
json_str = json.dumps(data)
print(json_str)
json.dumps() 是 Python 中进行序列化的函数。它将一个 Python 对象(比如字典)转化成 JSON 格式的字符串。在这个例子中,我们定义了一个字典 data,然后使用 json.dumps() 函数将其转换成 JSON 格式的字符串,并打印出来。输出的字符串可以被传输或保存为文件。
json.loads():用于将 JSON 格式的字符串解码为 Python 对象。
import json
json_str = '{"name": "Alice", "age": 30, "city": "New York"}'
# 将JSON字符串解码为Python对象
Python_obj = json.loads(json_str)
print(Python_obj)
json.loads() 是用于反序列化的函数。它将一个 JSON 格式的字符串转换为 Python 对象。比如,假设你有一个 JSON 字符串,想把它变成 Python 的字典,可以使用 json.loads()。在这里,我们从一个 JSON 字符串 json_str 开始,使用 json.loads() 将它转回 Python 字典。可以看到,输出是一个标准的 Python 字典对象。
JSON 文件的写入和读取
-
with open(file_path, mode, encoding) as filefile_path:要打开的文件路径mode:打开文件的模式,如r(只读)、w(写入)、a(追加) 等encoding(可选):文件的编码方式,默认为None,表示使用系统默认编码
json.dump():将 Python 对象序列转化为 JSON 格式并写入文件中。
import json
data = {
"name": "John",
"age": 25,
"city": "New York"
}
# 将数据写入JSON文件
with open("data.json", "w") as file:
json.dump(data, file)
除了处理 JSON 字符串外,我们还常常需要从文件中读取和写入 JSON 数据。Python 提供了 json.dump() 和 json.load() 来完成这两项任务。json.dump() 可以把 Python 对象直接写入 JSON 文件。比如你有一个字典数据,并想将它保存到一个文件中,可以这样做。我们使用 with open() 打开文件,并通过 json.dump() 将字典 data 写入到文件 data.json 中。w 表示写入模式,如果文件不存在会自动创建。
json.load:从文件中读取 JSON 格式的数据并解码为 Python 对象。
import json
# 从JSON文件中读取数据
with open("data.json", "r") as file:
data = json.load(file)
print(data)
json.load() 可以从文件中读取数据并将其转回 Python 对象。这样你可以从文件加载 JSON 数据进行进一步操作。在这个例子中,我们打开了一个 JSON 文件 data.json,然后使用 json.load() 将文件中的 JSON 数据加载并解析为 Python 字典,最后打印出来。
总结
- JSON 的结构规则
- Python 与 JSON 数据类型对应
- JSON 序列化与反序列化
- JSON 文件的写入和读取
来总结一下。在这一章节,我们了解了 JSON 的结构规则,以及它和 Python 数据类型的对应关系。我们还学习了如何使用 json.dumps() 和 json.loads() 进行 JSON 数据的序列化和反序列化,如何通过 json.dump() 和 json.load() 读取和写入 JSON 文件。掌握这些内容,可以帮助你在 Python 中轻松处理 JSON 数据,方便进行数据存储和交换。