【问题标题】:Avoid jsonpickle using py/id pointer to another object避免 jsonpickle 使用指向另一个对象的 py/id 指针
【发布时间】:2018-01-22 22:09:45
【问题描述】:

当使用 jsonpickle 将对象序列化为 json 时,我注意到诸如 datetime 之类的对象会存储一次,然后将来使用会存储为引用值,例如 {"py/id":1}。是否可以存储实际值而不是参考?此引用似乎是隐藏的,并且在直接与数据库交互时会令人困惑。

例如。 class MyClass: def __init__(self, eee): now = datetime.datetime.utcnow() self.ddd = now self.ddd2 = now self.ddd3 = now

Json 是 {"py/object": "__main__.MyClass", "py/state": {"ddd": {"py/object": "datetime.datetime", "__reduce__": [{"py/type": "datetime.datetime"}, ["B+IBFhYJCwx9oQ=="]]}, "ddd2": {"py/id": 1}, "ddd3": {"py/id": 1}, "eee": "fwaef"}}

【问题讨论】:

    标签: python json jsonpickle


    【解决方案1】:

    新的做事方式。上面的答案是旧的。

    jsonpickle.encode(my_object, unpicklable=False)

    【讨论】:

      【解决方案2】:

      调用jsonpickle.encode时可以使用make_refs参数:

      import datetime
      import jsonpickle
      
      class MyClass:
          def __init__(self, eee):
              now = datetime.datetime.utcnow()
              self.ddd = now
              self.ddd2 = now
              self.ddd3 = now
      
      my_object = MyClass('hi')
      jsonpickle.encode(my_object, make_refs=False)
      

      来自文档here

      ma​​ke_refs – 如果设置为 False,则禁用 jsonpickle 的引用支持。 id() 相同的对象不会在 encode()/decode() 中保留,但生成的 JSON 流在概念上会更简单。 jsonpickle 检测循环对象,并在 make_refs 设置为 False 时通过调用 repr() 而不是递归来打破循环。

      【讨论】:

        【解决方案3】:

        尝试使用 unpicklable 属性设置为 False

        import datetime
        import jsonpickle
        
        class MyClass:
            def __init__(self, eee):
                now = datetime.datetime.utcnow()
                self.ddd = now
                self.ddd2 = now
                self.ddd3 = now
        
        my_object = MyClass('hi')
        jsonpickle.encode(my_object, unpicklable=False)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-17
          • 2023-01-19
          • 2015-08-07
          • 1970-01-01
          • 2011-05-17
          • 1970-01-01
          • 1970-01-01
          • 2016-10-13
          相关资源
          最近更新 更多