[英]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.