Вы можете определить метод для выгрузки вашего classe в json с помощью json.dumps
.
import json
from collections import defaultdict
class A:
def __init__(self, items=[], string=None):
self.items = items
self.string = string
def toJSON(self):
return json.dumps(self, default=lambda obj: obj.__dict__)#, sort_keys=True, indent=4)
if __name__ == "__main__":
a1 = A([1, 2, 3], '123')
a2 = A([4, 5, 6], '456')
b1 = A([a1, a2], '123-456')
print(b1.toJSON())
# Result: {"items": [{"items": [1, 2, 3], "string": "123"}, {"items": [4, 5, 6], "string": "456"}], "string": "123-456"}
a3 = A([11, 22, 33], '112233')
a4 = A([44, 55, 66], '445566')
b2 = A([a3, a4], '112233-445566')
dict_b = defaultdict(list)
dict_b['b'].append(b1.toJSON())
dict_b['b'].append(b2.toJSON())
print(json.dumps(dict_b))
Недостатки У вас всегда будет сериализованная версия вашего класса.Чтобы избежать этого побочного эффекта, вы можете установить новый метод, чтобы превратить его в dict с loads
def to_dict(self):
return json.loads(self.toJSON())
И по умолчанию добавьте object.to_dict
dict_b = defaultdict(list)
dict_b['b'].append(b1.to_dict())
dict_b['b'].append(b2.to_dict())
print(json.dumps(dict_b))