- 序列化(将 Python 对象转换为 JSON 字符串)
- 使用
json
模块的dumps
方法:
- 示例代码:
import json data = {"name": "John", "age": 30, "city": "New York"} json_str = json.dumps(data) print(json_str)
- 在这个示例中,首先定义了一个包含姓名、年龄和城市信息的字典
data
。然后使用json.dumps
函数将这个字典转换为 JSON 字符串。dumps
函数会将 Python 字典中的键和值转换为 JSON 格式的键值对,其中字符串会用双引号包裹,并且按照 JSON 的语法规则进行格式化。 - 序列化其他 Python 对象类型:
json
模块还可以处理其他 Python 对象类型,如列表。例如:
import json data_list = [1, 2, 3, {"key": "value"}] json_str_list = json.dumps(data_list) print(json_str_list)
- 这里定义了一个包含整数和字典的列表
data_list
,json.dumps
函数将其转换为 JSON 字符串。在 JSON 字符串中,列表元素会按照顺序排列,字典元素也会遵循 JSON 的格式规则。 - 自定义序列化(处理特殊对象):
- 有时候,我们可能需要对一些特殊的 Python 对象进行序列化,比如自定义的类。假设我们有一个简单的类
Person
:
class Person: def __init__(self, name, age): self.name = name self.age = age p = Person("Alice", 25)
- 直接使用
json.dumps
会报错,因为json
模块不知道如何处理Person
类的对象。我们可以定义一个函数来将Person
对象转换为可以序列化的字典:
def person_to_dict(person): return {"name": person.name, "age": person.age} json_str_person = json.dumps(p, default = person_to_dict) print(json_str_person)
- 或者使用
lambda
表达式:json_str_person = json.dumps(p, default = lambda o: o.__dict__)
,这里__dict__
是 Python 对象的一个特殊属性,它返回一个包含对象属性和值的字典。
- 反序列化(将 JSON 字符串转换为 Python 对象)
- 使用
json
模块的loads
方法:
- 示例代码:
import json json_str = '{"name": "Bob", "age": 20, "city": "London"}' data = json.loads(json_str) print(data) print(data["name"])
- 首先定义了一个 JSON 字符串
json_str
,然后使用json.loads
函数将其转换为 Python 对象。在这个例子中,转换后的对象是一个字典,我们可以通过字典的键来访问相应的值,如data["name"]
来获取姓名信息。 - 反序列化 JSON 数组(列表):
- 当 JSON 字符串表示一个数组时,
json.loads
会将其转换为 Python 列表。例如:
import json json_str_list = '[1, 2, 3, {"key": "value"}]' data_list = json.loads(json_str_list) print(data_list) print(data_list[3]["key"])
- 这里的
json_str_list
是一个包含整数和字典的 JSON 数组。json.loads
将其转换为 Python 列表后,我们可以通过索引来访问列表中的元素,对于字典元素,还可以通过键来访问值。