Python二叉树序列化问题
我有一个二叉树的类,代码如下:
class BTree:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def __unicode__(self):
return "%s" % self.data
还有一个树的序列化方法,代码如下:
class JTree(object):
def __init__(self, id, children=None):
self.id = id
if children is None:
children=[]
self.children = children
def encode_tree(obj):
if not isinstance(obj, JTree):
raise TypeError("%r is not JSON serializable" % (o,))
return obj.__dict__
接着我用下面的方式填充二叉树的数据:
bt = BTree("1")
bt.left =BTree("2")
bt.right=BTree("3")
如果我对这些数据进行序列化,就能得到以下结果:
tree = JTree(bt.data, [JTree(bt.left.data), JTree(bt.right.data)])
print json.dumps(tree, default=encode_tree)
{"id": "1", "children": [{"id": "2", "children": []}, {"id": "3", "children": []}]}
问题是我不知道该怎么写代码来生成这个结果。这意味着我想要一个生成器或者递归函数来运行这段代码:
JTree(bt.data, [JTree(bt.left.data), JTree(bt.right.data)])
有人能给我点建议吗?谢谢!
2 个回答
0
这个 json
模块只能把字典(dict)、列表(list)、字符串(string)、数字(number)、布尔值(boolean)和 None
这些类型的数据转成 JSON 格式。如果你想用自定义的类,建议还是用普通的 dict
。另外,你也可以通过继承 json.JsonEncoder
类,并重写 default
方法,让它能把你的自定义类转换成上面提到的那些类型。
2
看起来你想要一个简单的递归函数,比如:
def convert_to_jtree(bt):
return JTree(bt.data, [convert_to_jtree(bt.left) if bt.left else None,
convert_to_jtree(bt.right) if bt.right else None])
或者类似的东西。