Привет!
Есть библиотека книг (класс BookLibrary), у библиотеки может быть много полок (класс BookShelf), у каждой полки много книг (клас Book).
Книга содержит в себе ссылку на полку, на которой стоит эта книга.
Как добиться того чтобы при сериализации в JSON всей полки книг, каждая книга содержала в себе ссылку на полку с книгой, без списка книг на полке, а при сериализации книги, ссылка на полку так же в себе имела и список книг?
Сейчас и тот и другой вариант возвращают какой-то ад..
Кодimport jsons
from dataclasses import dataclass
from typing import List
@dataclass
class BookShelf:
name: str
books: List # list of Book
def __init__(self, name):
self.name = name
self.books = list()
@dataclass
class Book:
name: str
shelf: BookShelf
def __init__(self, name, shelf):
self.name = name
self.shelf = shelf
@dataclass
class BookLibrary:
name: str
shelfes: List[BookShelf]
def __init__(self, name):
self.name = name
self.shelfes = list()
def run():
lib = BookLibrary(name = 'Books library')
shelf = BookShelf(name = 'python')
book = Book(name = 'Alice in wonderlands', shelf = shelf)
shelf.books.append(book)
lib.shelfes.append(shelf)
print('JSON:\n'+jsons.dumps(lib))
if __name__ == '__main__':
try:
run()
except SystemExit:
pass
Результат
{
"name": "Books library",
"shelfes": [{
"books": [{
"name": "Alice in wonderlands",
"shelf": {
"books": [{
"name": "Alice in wonderlands",
"shelf": {
# repeating shelf/books/shelf/books..
}
],
"name": "python"
}
}
],
"name": "python"
}
]
}