1. 简介
在Python中,JSON(JavaScript Object Notation)是一种非常方便的数据格式。Python标准库中的json模块可以方便的实现JSON数据的编解码,即将Python对象转换为JSON格式的字符串,或者将JSON格式的字符串转换为Python对象。在本文中我们将学习如何使用Python的json标准库来编写JSON交互程序。
2. 使用json.dumps()实现Python对象到JSON字符串的转换
2.1 简介
在实际项目中,我们需要将Python对象转换为JSON格式的字符串,以在各个平台之间共享数据。Python内置的json库中提供了dumps()函数来实现上述功能。
2.2 语法
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
2.3 参数解释
obj: 必填参数,要转换的Python对象。
skipkeys: 如果设置为True,则跳过不遵循JSON规范的键值对(例如:dict中key为非字符串或自定义对象)。
ensure_ascii: 如果设置为False,则禁用ASCII编码,输出原始字符。
check_circular: 如果设置True,则检查对象循环引用。
allow_nan: 如果设置True,则允许输出NaN、Infinity及-Infinity。
cls: 用于编码的自定义对象。
indent: 用于缩进json数据的字符串,可以是数字或者字符串。
separators: 控制不同数据间,不同容器间的分隔符,如(",", ": ")。
default: 如果obj中含有不能被json序列化的类型时,会对该类型数据调用default(), 该函数有一个输入,即不支持序列化的对象输出一个支持序列化的数据。
sort_keys: 是否排序keys。
kw: 任意关键字参数可以用于json.dumps()方法。
2.4 示例
下面的示例展示了如何将Python对象转换为JSON格式的字符串:
import json
person = {"name": "John", "age": 30, "city": "New York"}
person_json = json.dumps(person)
print(person_json)
# 输出结果:
# {"name": "John", "age": 30, "city": "New York"}
从上述示例中,我们可以看到如何使用json.dumps()将Python字典转换为JSON格式的字符串。此处我们将Python字典对象person转换为字符串person_json,Python对象的键为JSON对象的字段名,Python对象的值为JSON对象的字段值。
3. 使用json.loads()实现JSON字符串到Python对象的转换
3.1 简介
json.loads()函数用于将JSON格式的字符串转换为Python对象。在Python中,我们通常会通过网络发送JSON格式的数据,并使用json.loads()进行反序列化。另外,我们也可以从文件或数据库中读取JSON数据,并使用json.loads()函数进行反序列化。
3.2 示例
下面的示例展示了如何将JSON格式的字符串转换为Python对象:
import json
# JSON格式字符串
person_json = '{"name": "John", "age": 30, "city": "New York"}'
# 将JSON格式字符串转换为Python对象
person = json.loads(person_json)
# 输出Python对象
print(person)
# 输出结果:
# {'name': 'John', 'age': 30, 'city': 'New York'}
从上面的示例中,我们可以看到如何使用json.loads()将JSON格式的字符串转换为Python对象。此处我们将JSON格式的字符串person_json转换为Python对象person。Python对象的键值对一一对应与JSON对象中的字段和字段值。
4. 使用dump()和load()函数来实现文件的JSON数据读写
4.1 简介
在实际应用中,我们通常需要将JSON数据写入文件或从文件中读取JSON数据。Python标准库中json模块中提供了dump()函数和load()函数来完成这些任务。dump()函数用于将Python对象写入文件中,而load()用于从文件中读取JSON数据并转换为Python对象。
4.2 示例
下面的示例展示了如何将Python对象写入文件:
import json
person = {"name": "John", "age": 30, "city": "New York"}
# 将Python对象写入文件中
with open('person.json', 'w') as f:
json.dump(person, f)
在上述示例中,我们创建了一个Python字典对象person,通过使用json.dump()将该对象写入到person.json文件中。
下面的示例展示了如何加载JSON格式的数据,并转换为Python对象:
import json
# 从文件中读取JSON格式数据,并转换为Python对象
with open('person.json', 'r') as f:
person = json.load(f)
# 输出Python对象
print(person)
# 输出结果:
# {'name': 'John', 'age': 30, 'city': 'New York'}
在上述示例中,我们将person.json文件中的数据读取,并转换为Python对象。
5. 使用json.JSONEncoder类自定义JSON格式的输出
5.1 简介
Python提供了json.JSONEncoder类,可以用来自定义JSON格式的输出。当需要将自定义对象转换为JSON字符串时,我们可以通过继承JSONEncoder类并重载默认的encode()方法来自定义对象的序列化处理过程。下面的示例展示了如何自定义对象的序列化处理,并将该对象转换为JSON格式的字符串:
import json
class Person:
def __init__(self, name, age, city):
self.name = name
self.age = age
self.city = city
class PersonEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Person):
return {"name": obj.name, "age": obj.age, "city": obj.city}
return super().default(obj)
person = Person("John", 30, "New York")
person_json = json.dumps(person, cls=PersonEncoder)
print(person_json)
# 输出结果:
# {"name": "John", "age": 30, "city": "New York"}
从上述示例中,我们自定义了一个Person对象,并使用自定义的PersonEncoder进行序列化处理,最终将该对象转换为JSON格式的字符串。
6. 总结
在Python中,标准库中的json模块提供了一种非常方便的JSON编解码功能,可以使用json.dumps()将Python对象转换为JSON格式的字符串,并使用json.loads()将JSON格式的字符串转换为Python对象。除此之外,我们也可以使用json.dump()和json.load()函数来实现JSON数据的文件读写,同时也可以通过自定义json.JSONEncoder类来实现JSON格式的自定义输出。