首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇怪的jsonpickle.encode行为

奇怪的jsonpickle.encode行为
EN

Stack Overflow用户
提问于 2021-05-24 13:33:34
回答 1查看 32关注 0票数 0

我正在使用jsonpickle作为我的小项目的数据库,在编码一个复杂的类时遇到了一些奇怪的行为,基本上来自User实例的Book编码是正确的,但db列表中的书籍被编码为奇怪的{"py/id":4}-s。有人能解释一下我哪里出了问题吗?我该如何修复这个问题呢?

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
{
   "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
      }
   ]
}
EN

回答 1

Stack Overflow用户

发布于 2021-05-25 11:35:52

显然,jsonpickle使用这个id来紧凑地存储已经存储在object编码中的某个地方的对象。要显式存储所有对象,可以在编码时使用make_refs标志。在上面的代码中,它看起来像这样:print(jsonpickle.encode(db), make_refs=False)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67667095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档