Python JSON模块详解
JSON(JavaScript Object Notation)是一个受 JavaScript 的对象字面量语法启发的轻量级数据交换格式。尽管 JSON 是 JavaScript 的一个子集,但 JSON 是独立于语言的文本格式。用 JSON 格式描述的数据,可读性很强,其书写格式非常类似于字典,字段名称和值之间用冒号隔开,即“字段名称:值”。
作为 Python 的一个第三方包名,JSON 要用全部小写的形式,即 json。json 提供了与标准库 marshal 和 pickle 相似的 API 接口。
我们也可以将一个 JSON 编码的字符串转换为一个 Python 数据类型,方法如下:
我们可以用 type( ) 方法来查看 data1 的类型,如下:
【例 2】将列表保持到 json 文件中(json-file.py)

图 1:JSON 文件
代码的第 03~05 行定义了一个列表,列表中有一个元素:一个含有多个键/值对的字典。第 07 行利用 open( ) 函数创建了一个文件对象,并取了一个别名为 f。这里利用了 with 语句上下文管理器,执行 with 语句块后,系统会自动进行资源清理,针对上面的例子而言就是,执行 with 语句块后,Python 系统会自动关闭文件。
类似地,我们可以使用 json.load( ) 把数据从 JSON 文件中读取出来,代码如下:
我们可以把 data3 中的字典信息读取出来,方法如下:
对比图 1 和上面的输出可以发现,JSON 编码格式和 Python 内置的字典类型几乎一样,也有一些细小差异。比如,Python 中的 True 会被映射为 true,False 会被映射为 false,而 None 会被映射为 null。
作为 Python 的一个第三方包名,JSON 要用全部小写的形式,即 json。json 提供了与标准库 marshal 和 pickle 相似的 API 接口。
Python dumps与loads
在 Python 3.x 中,可以使用 json 模块来对 JSON 数据进行编解码,它包含了如下两个函数。- json.dumps():将 Python 对象序列化(即编码)为 JSON 格式的字符串。
- json.loads():将 JSON 格式的字符串反序列化(即解码)为 Python 对象。
【例 1】利用 json 模块实现序列化(dumps-json.py)“dumps”的本意是“倾倒”,这里表示内存信息的转储,它可以把 Python 的原始类型(如字典、列表等)向JSON类型转换;“loads”的本意是“装载”,这里表示把 JSON 类型变换为 Python 的原始数据类型。
import json #导入 json 模块 data = { #定义一个字典 data 'name':'ACME', 'shares':100, 'price':542.23 } json_str = json.dumps(data) #将字典 data 序列化为 JOSN 对象 print(json_str)程序执行结果为:
{"name":"ACME", "shares":100, "price":542.23}
查看第 07 行,序列化的 JSON 对象在本质上就是字符串,所以我们可以用 print( ) 直接输出结果(第 08 行)。我们也可以将一个 JSON 编码的字符串转换为一个 Python 数据类型,方法如下:
data1 = json.loads(json_str) #反序列化 print(datal)程序执行结果为:
{'name':'ACME', 'shares':100, 'price':542.23}
我们可以用 type( ) 方法来查看 data1 的类型,如下:
type(data)
程序执行结果为:dict
由运行结果可以看出,第 09 行代码成功将一个 JSON 字符串对象反序列化(解码)为一个字典类型。Python dump与load
如果我们要处理的是文件而不是字符串,则可以使用 json.dump( ) 和 json.load( ) 来编码和解码 JSON 数据(即动词 dump 和 load 后面没有字母 s),如例 2 所示。【例 2】将列表保持到 json 文件中(json-file.py)
import json #从列表中打包 data2 = [ { 'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5 }] #将数据保存到JSON文件中 with open('data.json','w') as f: json.dump(daf)运行上述代码之后,在 json-file.py 相同文件夹下将会出现一个 JSON 文件 data.json,如图 1 所示。

图 1:JSON 文件
代码的第 03~05 行定义了一个列表,列表中有一个元素:一个含有多个键/值对的字典。第 07 行利用 open( ) 函数创建了一个文件对象,并取了一个别名为 f。这里利用了 with 语句上下文管理器,执行 with 语句块后,系统会自动进行资源清理,针对上面的例子而言就是,执行 with 语句块后,Python 系统会自动关闭文件。
类似地,我们可以使用 json.load( ) 把数据从 JSON 文件中读取出来,代码如下:
#将数据从JSON文件中读取出来 with open('data.json', 'r ') as f: data3 = json.load(f)
我们可以把 data3 中的字典信息读取出来,方法如下:
print(data3[0])程序执行结果如下:
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
对比图 1 和上面的输出可以发现,JSON 编码格式和 Python 内置的字典类型几乎一样,也有一些细小差异。比如,Python 中的 True 会被映射为 true,False 会被映射为 false,而 None 会被映射为 null。