我正在使用jsonpickle作为我的小项目的数据库,在编码一个复杂的类时遇到了一些奇怪的行为,基本上来自User实例的Book编码是正确的,但db列表中的书籍被编码为奇怪的{"py/id":4}-s。有人能解释一下我哪里出了问题吗?我该如何修复这个问题呢?
import jsonpickle
from random import randint
admin_ids = [302115492]
def gen_id():
return randint(1, 2**64)
class Book():
def __init__(self, name, author, img, oid):
self.name = name
self.author = author
self.img = img
self.id = gen_id()
self.owner_id = oid
class User():
id = 0
name = ""
books = []
requests = []
def __init__(self, name, uid):
self.id = uid
self.name = name
self.books = []
class Database():
def __init__(self):
self.u_dir = "users"
self.b_dir = "books"
self.users = []
self.books = []
def add_book(self, book):
self.books.append(book)
for user in self.users:
if(user.id == book.owner_id):
user.books.append(book)
def add_user(self, user):
self.users.append(user)
db=Database()
db.add_user(User('John',123))
db.add_book(Book('name','author','img.png',123))
print(jsonpickle.encode(db))输出:
{
"py/object":"__main__.Database",
"u_dir":"users",
"b_dir":"books",
"users":[
{
"py/object":"__main__.User",
"id":123,
"name":"John",
"books":[
{
"py/object":"__main__.Book",
"name":"name",
"author":"author",
"img":"img.png",
"id":8045585124766781176,
"owner_id":123
}
]
}
],
"books":[
{
"py/id":4
}
]
}发布于 2021-05-25 11:35:52
显然,jsonpickle使用这个id来紧凑地存储已经存储在object编码中的某个地方的对象。要显式存储所有对象,可以在编码时使用make_refs标志。在上面的代码中,它看起来像这样:print(jsonpickle.encode(db), make_refs=False)
https://stackoverflow.com/questions/67667095
复制相似问题