Python中复杂对象序列化为JSON的完整指南
本文详解Python中将复杂对象转换为JSON字符串的方法。针对简单字典,直接使用json.dumps即可;对于包含自定义类的复杂结构,需通过定义__repr__及利用json.dumps的default参数调用__dict__来实现序列化。文章提供了完整代码示例、输出结果及在线工具推荐,帮助开发者掌握Python JSON处理的核心技巧。
本文详细介绍在Python环境中将复杂对象转换为JSON格式的实现方案,旨在为读者提供实用的参考代码与解析思路。
在Python中,将结构简单的对象(如字典、列表等)转换为JSON字符串通常非常直观且易于操作。具体实现方式如下所示:
import json
d = {'a': 'aaa', 'b': ['b1', 'b2', 'b3'], 'c': 100}
json_str = json.dumps(d)
print json_str
当面对包含自定义类或嵌套结构的复杂对象时,直接序列化可能会遇到类型不支持的问题。此时,可以通过以下方法实现自定义对象的JSON转换,例如处理包含多个属性的类实例:
import json
class Customer:
def __init__(self, name, grade, age, home, office):
self.name = name
self.grade = grade
self.age = age
self.address = Address(home, office)
def __repr__(self):
return repr((self.name, self.grade, self.age, self.address.home, self.address.office))
class Address:
def __init__(self, home, office):
self.home = home
self.office = office
def __repr__(self):
return repr((self.name, self.grade, self.age))
customers = [
Customer('john', 'A', 15, '111', 'aaa'),
Customer('jane', 'B', 12, '222', 'bbb'),
Customer('dave', 'B', 10, '333', 'ccc'),
]
json_str = json.dumps(customers, default=lambda o: o.__dict__, sort_keys=True, indent=4)
print json_str
执行上述代码后,得到的JSON输出结果如下所示:
[
{
"address": {
"home": "111",
"office": "aaa"
},
"age": 15,
"grade": "A",
"name": "john"
},
{
"address": {
"home": "222",
"office": "bbb"
},
"age": 12,
"grade": "B",
"name": "jane"
},
{
"address": {
"home": "333",
"office": "ccc"
},
"age": 10,
"grade": "B",
"name": "dave"
}
]
补充说明:为了方便进行JSON数据的处理与调试,这里推荐几款实用的在线JSON工具供参考:
在线JSON代码检验、校验、美化及格式化工具: http://tools.jb51.net/code/json
JSON在线格式化工具: http://tools.jb51.net/code/jsonformat
在线XML与JSON互相转换工具: http://tools.jb51.net/code/xmljson
JSON代码在线格式化、美化、压缩、编辑及转换工具: http://tools.jb51.net/code/jsoncodeformat
在线JSON压缩及转义处理工具: http://tools.jb51.net/code/json_yasuo_trans
如需深入了解Python其他相关操作,建议查阅本站专题:《Python操作json技巧总结》、《Python编码操作技巧总结》、《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》以及《Python文件与目录操作技巧汇总》。
希望本文提供的解决方案能对您的Python编程工作有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









