Python json模块的用法(附带实例)
Python 内置了 json 模块,用于处理 JSON 数据与 Python 基础数据的相互转换。
在 json 模块中,有 json.dumps、json.dump、json.loads、json.load 这 4 个主要的函数来实现相关的转换功能。
json 模块的 4 个函数与数据转换的关系如下图所示:

图 1 json 模块的 4 个函数与数据转换的关系
使用 json.dumps 函数将 Python 数据对象转换为 JSON 数据,例如:
读者需要掌握 json.dump 函数的以下 4 个参数:
使用 json.dump() 函数将 Python 数据对象转换为 JSON 文本并写入文本文件,例如:
json.loads() 函数中最重要的参数是第一个参数 s(一般按位置赋值的方式传入实参),用于接收要转换的 JSON 文本字符串。json.loads() 函数将 JSON 数据转换为 Python 数据,例如:
在 json 模块中,有 json.dumps、json.dump、json.loads、json.load 这 4 个主要的函数来实现相关的转换功能。
json 模块的 4 个函数与数据转换的关系如下图所示:

图 1 json 模块的 4 个函数与数据转换的关系
json.dumps()函数
json.dumps 函数的主要功能是将 Python 的数据对象转换为 JSON 数据。读者需要掌握以下 3 个参数:- obj:Python 的数据对象;
- indent:缩进,默认是 None,即 JSON 文本会以最紧凑的方式进行展示。缩进的值可以被适当调整为整数 2 或者 4;
- ensure_ascii:是否使用 ASCII 编码,默认值为 True。如果数据对象中含有中文,建议将此值设置为 False,这样中文内容就不会被编码处理,而是以中文的字符串保存。
使用 json.dumps 函数将 Python 数据对象转换为 JSON 数据,例如:
import json python_data = {'name': 'netdevops01', 'ip': '192.168.137.1', 'vendor': '华为', 'online': True, 'rack': '0101', 'start_u': 20, 'end_u': 21, 'interface_usage': 0.67, 'interfaces': ['eth1/1', 'eth1/2', 'eth1/3'], 'uptime': None} json_text = json.dumps(python_data, ensure_ascii=False, indent=4) print(type(json_text)) print(json_text)其输出结果如下:
<class 'str'> { "name": "netdevops01", "ip": "192.168.137.1", "vendor": "华为", "online": true, "rack": "0101", "start_u": 20, "end_u": 21, "interface_usage": 0.67, "interfaces": [ "eth1/1", "eth1/2", "eth1/3" ], "uptime": null }
json.dump()函数
json 模块提供了函数 json.dump,它通过调用文件对象的 write 方法,可以将 Python 数据对象转换为 JSON 文本的字符串并写入文件。读者需要掌握 json.dump 函数的以下 4 个参数:
- obj:Python 数据对象,它是第一个参数,用法与 json.dumps 函数的 obj 参数相同;
- fp:将它视为可以写入的文本文件对象即可;
- indent:缩进,用法与 json.dumps 函数的 indent 参数相同;
- ensure_ascii:是否使用 ASCII 编码,用法与 json.dumps 函数的 ensure_ascii 参数相同。
使用 json.dump() 函数将 Python 数据对象转换为 JSON 文本并写入文本文件,例如:
import json python_data = {'name': 'netdevops01', 'ip': '192.168.137.1', 'vendor': '华为', 'online': True, 'rack': '0101', 'start_u': 20, 'end_u': 21, 'interface_usage': 0.67, 'interfaces': ['eth1/1', 'eth1/2', 'eth1/3'], 'uptime': None} with open('data.json', mode='w', encoding='utf8') as f: json.dump(python_data, fp=f, ensure_ascii=True, indent=4)成功运行代码后,在代码所在的目录中会生成一个名为 data.json 的文本文件。
json.loads()函数
json.loads() 函数可以将 JSON 数据转换为 Python 的数据对象。json.loads() 函数中最重要的参数是第一个参数 s(一般按位置赋值的方式传入实参),用于接收要转换的 JSON 文本字符串。json.loads() 函数将 JSON 数据转换为 Python 数据,例如:
import json json_text = """{ "name": "netdevops01", "ip": "192.168.137.1", "vendor": "huawei", "online": true, "rack": "0101", "start_u": 20, "end_u": 21, "interface_usage": 0.67, "interfaces": ["eth1/1","eth1/2","eth1/3"], "uptime": null }""" data = json.loads(json_text) print(type(data)) print(data)其输出结果如下:
<class 'dict'>
{'name': 'netdevops01', 'ip': '192.168.137.1', 'vendor': 'huawei', 'online': True, 'rack': '0101'’, 'start_u': 20, 'end_u': 21, 'interface_usage': 0.67, 'interfaces': ['eth1/1', 'eth1/2', 'eth1/3'], 'uptime': None}
json.load()函数
json.load() 函数将文本文件对象转换为 Python 数据,例如:import json with open('data.json', encoding='utf8') as f: data = json.load(fp=f) print(type(data)) print(data)输出结果如下:
<class 'dict'>
{'name': 'netdevops01', 'ip': '192.168.137.1', 'vendor': '华为', 'online': True,
'rack': '0101', 'start_u': 20, 'end_u': 21, 'interface_usage': 0.67, 'interfaces':
['eth1/1', 'eth1/2', 'eth1/3'], 'uptime': None}