如何让Python jsonpickle递归工作?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何让Python jsonpickle递归工作?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2063字,纯文字阅读大概需要3分钟。
内容图文
![如何让Python jsonpickle递归工作?](/upload/InfoBanner/zyjiaocheng/749/3f4b2f0e92164120ad8bfcf9f1cc1dfa.jpg)
我无法让Python的jsonpickle 0.4.0“递归”到包含自定义对象的自定义对象.这是显示我的问题的示例代码.
import jsonpickle
import jsonpickle.handlers
class Ball(object):
def __init__(self, color):
self.color = color
class Box(object):
def __init__(self, *args):
self.contents = args
class BallHandler(jsonpickle.handlers.BaseHandler):
def flatten(self, obj, data):
data['color'] = obj.color
return data
class BoxHandler(jsonpickle.handlers.BaseHandler):
def flatten(self, obj, data):
data['contents'] = obj.contents
return data
jsonpickle.handlers.registry.register(Ball, BallHandler)
jsonpickle.handlers.registry.register(Box, BoxHandler)
# works OK -- correctly prints: {"color": "white"}
white_ball = Ball('white')
print jsonpickle.encode(white_ball, unpicklable=False)
# works OK -- correctly prints: [{"color": "white"}, {"color": "green"}]
green_ball = Ball('green')
balls = [white_ball, green_ball]
print jsonpickle.encode(balls, unpicklable=False)
# works OK -- correctly prints: {"contents": [1, 2, 3, 4]}
box_1 = Box(1, 2, 3, 4)
print jsonpickle.encode(box_1, unpicklable=False)
# dies with "Ball object is not JSON serializable"
box_2 = Box(white_ball, green_ball)
print jsonpickle.encode(box_2, unpicklable=False)
球有“颜色”,盒子有“内容”.如果我有一个[本机]球阵列,那么jsonpickle可以工作.如果我有一个[native] int的盒子,那么jsonpickle可以工作.
但是,如果我有一盒球,jsonpickle炸弹与“球对象不是JSON序列化”.
从堆栈跟踪中,我有一种预感,编码器正在离开jsonpickle并转向其他一些JSON库……显然我不知道我已经注册了BallHandler.
我该如何解决这个问题?
顺便说一句,我的示例并没有明确地使用Django的任何部分,但我需要这个在Django应用程序中工作.
感谢任何输入!
解决方法:
我想你可以回到酸洗环境继续酸洗.
class BoxHandler(jsonpickle.handlers.BaseHandler):
def flatten(self, obj, data):
return [self.context.flatten(x,reset=False) for x in obj.contents]
这似乎与内置的_list_recurse()函数在pickler.py:44中处理这种情况类似,因为flatten()只调用self._flatten(在可选地重置状态变量之后).
def _list_recurse(self,obj):
在[obj]中返回[self._flatten(v)for v]
我现在只是测试它,并且_depth似乎按预期保持.
内容总结
以上是互联网集市为您收集整理的如何让Python jsonpickle递归工作?全部内容,希望文章能够帮你解决如何让Python jsonpickle递归工作?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。