基本概念
JSON(JavaScript 对象表示法)是一种广泛使用的数据交换格式,因为其易于人类阅读和编写,也很容易被计算机解析和生成。我们经常会在配置文件、或者服务器与 Web 应用程序之间的数据交换等场景中使用到 JSON。
在本节中,我们将探讨 JSON 的基本概念,并学习如何在 Python 中操作 JSON 文件。
理解 JSON
JSON 的历史
JSON 于 21 世纪初被引入到程序开发中,并迅速因其轻量级的数据交换特性而受到广泛欢迎。它源自 JavaScript,但与编程语言无关,适用于各种不同的编程语言。
JSON 的标准语法
JSON 数据以键值对的形式表示,类似于 Python 的字典。下面让我们梳理一下 JSON 语法的关键点:
- 数据以键值对的形式组织,用花括号
{}括起来。 - 键必须是双引号括起来的字符串。
- 值可以是字符串、数字、对象、数组、布尔值或 null。
- 对象中的项目由逗号分隔。
- 数组是由方括号
[]括起来的有序值列表。
让我们来看一个例子。
{
"name": "John",
"age": 30,
"city": "New York",
"is_student": false,
"grades": [95, 88, 92],
"address": {
"street": "123 Main St",
"zip": "10001"
},
"languages": null
}上面这个 JSON 数据表示了一个人的个人信息,包括他的姓名、年龄、城市、学生状态、成绩、地址、使用的语言等等。在这个示例中:
- JSON 数据以键值对的形式组织,用花括号
{}括起来。 - 键被双引号括起来。例如,
"name"、"age"和"city"都是键。 - 值可以是不同类型的数据:
- 字符串:
"John"、"New York"、"123 Main St"。 - 数字:
30、95、88、92。 - 布尔值:
true或false(注意 JSON 使用小写表示布尔值)。 - 数组:
[95, 88, 92]是一个包含数字的数组。 - 对象:
"address"是一个包含"street"和"zip"的对象。 - 空值:
"languages"具有null值。
- 字符串:
同时,在上述对象的内部,不同项目由逗号分隔。
当我们把上述 JSON 数据保存在一个文件中时,其就成为了 JSON 文件。通常,JSON 文件的后缀名是.json,当然,这不是必须的。
这种 JSON 文件在程序进行数据交换时很常见,下面就让我们来学习如何在 Python 中操作此类的 JSON 文件。
如何在 Python 中读取 JSON 文件
Python 提供了两个主要的库用于处理 JSON:json 和 simplejson。json 库是 Python 标准库的一部分,通常用于大多数 JSON 操作。它提供了编码 Python 对象为 JSON 和解码 JSON 为 Python 对象的方法。
打开和读取 JSON 文件
要在 Python 中操作 JSON 文件,首先需要打开,然后使用load()方法读取内容。让我们来看一个例子:
import json
# 以读取模式打开JSON文件
with open("data.json", "r") as file:
data = json.load(file)
print(data)json.load() 方法用于从文件中读取和解析 JSON 数据。它以文件对象作为参数,并返回与文件中 JSON 数据对应的 Python 数据结构。其基本语法是:json.load(file)。
使用json.load()后,JSON 数据将被转换为 Python 对象,如字典、列表、字符串、数字、布尔值和None(对应 JSON 中的null)。然后,我们就可以像处理任何其他 Python 数据一样处理这些数据了。
将 JSON 数据写入文件
要将数据写入 JSON 文件,可以使用 dump() 方法:
import json
data = {"name": "John", "age": 30, "city": "New York"}
# 以写入模式打开JSON文件
with open("output.json", "w") as file:
json.dump(data, file)json.dump() 方法用于将 Python 数据写入 JSON 文件。它接受两个参数:要写入的 Python 数据以及要保存数据的文件对象。其基本语法是:json.dump(data, file)。
使用json.dump()后,Python 数据将转换为 JSON 格式并写入文件。
使用simplejson库
除了 Python 内置的json库外,我们还可以使用第三方的simplejson库来操作 JSON 文件。simplejson 库提供了与 Python 内置的json库类似的功能,用于处理 JSON 数据。一般来说,如果我们需要更灵活地控制 JSON 序列化和反序列化时,或者在使用不支持json模块的较旧的 Python 版本时,可以使用它。
安装 simplejson
由于 simplejson 是外部库,因此,在使用前,我们首先需要安装它。我们可以使用 pip 进行安装:
pip install simplejson安装后,我们可以将其导入到 Python 代码中:
import simplejson as json使用 simplejson 进行 JSON 序列化和反序列化
下面是如何使用 simplejson 进行 JSON 序列化和反序列化的示例:
JSON 序列化(Python 转 JSON)
import simplejson as json
data = {"name": "Alice", "age": 25, "city": "London"}
# 将Python数据序列化为JSON字符串
json_string = json.dumps(data, indent=4) # 'indent'参数用于美化输出
print(json_string)在上面的代码中,我们使用 json.dumps() 将 Python 数据(data)序列化为 JSON 字符串。indent 参数用于美化输出,添加缩进以提高可读性。
JSON 反序列化(JSON 转 Python)
import simplejson as json
json_string = '{"name": "Bob", "age": 28, "city": "New York"}'
# 将JSON字符串反序列化为Python数据
data = json.loads(json_string)
print(data["name"])这里,我们使用 json.loads() 将 JSON 字符串(json_string)反序列化为 Python 数据(data),可以像字典一样访问它。
处理 JSON 文件
我们还可以像使用内置的 json 库一样的方式,使用 simplejson 库来处理 JSON 文件:
从文件中读取 JSON
import simplejson as json
# 以读取模式打开JSON文件
with open("data.json", "r") as file:
data = json.load(file)将 JSON 写入文件
import simplejson as json
data = {"name": "Charlie", "age": 35, "city": "Paris"}
# 以写入模式打开JSON文件
with open("output.json", "w") as file:
json.dump(data, file, indent=4)simplejson的用法与json很类似,因此我们可以根据需要在代码中切换它们。如果我们需要更灵活地控制 JSON 序列化和反序列化,或者在使用较旧的 Python 版本时,可以使用simplejson。
总结
JSON 是一种多用途且广泛应用于各种应用中的数据格式,而 Python 提供了强大的工具来处理 JSON 文件。了解 JSON 的基本概念,如其语法和结构,在处理 JSON 数据时至关重要。
在 Python 中,内置的json 库和第三方的simplejson库都提供了便捷的 JSON 文件操作方法,从而帮助开发人员能够无缝地加载和保存数据。