[英]How to serialize a list containing class instances?
如何将包含对象列表的对象序列化为 JSON?
我得到的错误:
TypeError: Object of type person is not JSON serializable
代码:
import json
class person:
def __init__(self, name, cars):
self._name = name
self._cars = cars
class car:
def __init__(self, brand, color):
self._brand = brand
self._color = color
Jason = person("Jason", [car("Toyota", "Blue"), car("Honda", "Red")])
Kenny = person("Kenny", [car("Honda", "Black"), car("Toyota", "Pink")])
json = json.dumps([Jason, Kenny])
print(json)
我想要的输出:
[
{
"name": "Jason",
"cars":[
{
"brand": "Toyota",
"color": "Blue"
},
{
"brand": "Honda",
"color": "Red"
}
]
},
{
...
}
]
您可以创建自己的json.JSONEncoder
并向您的类添加特殊方法。 例如:
import json
class MyEncoder(json.JSONEncoder):
def default(self, o):
if hasattr(o, "reprJson"):
return o.reprJson()
else:
return super().default(o)
class person:
def __init__(self, name, cars):
self._name = name
self._cars = cars
def reprJson(self):
return dict(name=self._name, cars=self._cars)
class car:
def __init__(self, brand, color):
self._brand = brand
self._color = color
def reprJson(self):
return dict(brand=self._brand, color=self._color)
Jason = person("Jason", [car("Toyota", "Blue"), car("Honda", "Red")])
Kenny = person("Kenny", [car("Honda", "Black"), car("Toyota", "Pink")])
print(json.dumps([Jason, Kenny], cls=MyEncoder, indent=4))
印刷:
[
{
"name": "Jason",
"cars": [
{
"brand": "Toyota",
"color": "Blue"
},
{
"brand": "Honda",
"color": "Red"
}
]
},
{
"name": "Kenny",
"cars": [
{
"brand": "Honda",
"color": "Black"
},
{
"brand": "Toyota",
"color": "Pink"
}
]
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.