python 对象转json

在 Python 中,我们经常需要将数据转换为 JSON(JavaScript 对象标记)格式,以便在不同的系统之间进行数据传输和交互。Python 中的 json 模块可以帮助我们方便地将 Python 的对象转换为 JSON 格式,并且可以在需要的时候将 JSON 格式数据转换回原始的 Python 对象。
本文将介绍如何使用 json 模块将 Python 中的各种对象转换为 JSON 格式,并给出一些示例代码和运行结果。
基本数据类型的转换
首先,我们可以将 Python 中的基本数据类型(如 int、float、str、list、dict 等)转换为 JSON 格式。这些基本数据类型在 JSON 中有对应的表示方式,转换过程非常简单。
将 int 和 float 转换为 JSON
import json
# 将 int 和 float 转换为 JSON
num = 123
num_json = json.dumps(num)
print(num_json) # 输出: 123
float_num = 3.14
float_num_json = json.dumps(float_num)
print(float_num_json) # 输出: 3.14
将 str 转换为 JSON
import json
# 将 str 转换为 JSON
name = "Alice"
name_json = json.dumps(name)
print(name_json) # 输出: "Alice"
将 list 和 dict 转换为 JSON
import json
# 将 list 和 dict 转换为 JSON
my_list = [1, 2, 3]
my_list_json = json.dumps(my_list)
print(my_list_json) # 输出: [1, 2, 3]
my_dict = {"name": "Bob", "age": 30}
my_dict_json = json.dumps(my_dict)
print(my_dict_json) # 输出: {"name": "Bob", "age": 30}
自定义对象的转换
除了基本数据类型外,我们还可以将自定义的对象转换为 JSON 格式。在将自定义对象转换为 JSON 时,需要指定对象的转换方式,通常通过定义对象的 __dict__ 方法来实现。
将自定义类转换为 JSON
import json
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Alice", 25)
# 定义转换方式
def default(obj):
if isinstance(obj, Person):
return obj.__dict__
return obj
person_json = json.dumps(person, default=default)
print(person_json) # 输出: {"name": "Alice", "age": 25}
处理日期对象
在将日期对象转换为 JSON 时,需要首先将日期对象转换为字符串,然后再转换为 JSON 格式。
将日期对象转换为 JSON
import json
from datetime import datetime
# 将日期对象转换为 JSON
today = datetime.today()
today_json = json.dumps(today.isoformat())
print(today_json) # 输出: "2021-09-01T15:30:00.123456"
处理复杂对象
有时候我们需要处理更复杂的对象,比如嵌套的对象、对象的属性是对象等。在将复杂对象转换为 JSON 时,需要递归地处理对象的属性。
处理复杂对象转换为 JSON
import json
class Address:
def __init__(self, city, street):
self.city = city
self.street = street
class Person:
def __init__(self, name, age, address):
self.name = name
self.age = age
self.address = address
address = Address("Beijing", "Chang'an Street")
person = Person("Alice", 25, address)
# 定义转换方式
def default(obj):
if isinstance(obj, Person):
return obj.__dict__
if isinstance(obj, Address):
return obj.__dict__
return obj
person_json = json.dumps(person, default=default)
print(person_json) # 输出: {"name": "Alice", "age": 25, "address": {"city": "Beijing", "street": "Chang'an Street"}}
总结
通过本文的介绍,我们了解了如何使用 json 模块将 Python 中的各种对象转换为 JSON 格式。在将自定义对象转换为 JSON 时,需要定义对象的转换方式,将对象转换为字典形式。在处理复杂对象时,需要递归地处理对象的属性,确保所有属性都能正确转换为 JSON 格式。
极客教程