, . dict __dict__ , , :
""? ( )
jsobject.py (PyDoc.net)
Python, Javascript ( )
AttrDict ( ActiveState)
( ActiveState)
... , , ( ) Python.
class TreeNode(dict):
def __init__(self, name, children=None):
super().__init__()
self.__dict__ = self
self.name = name
self.children = [] if not children else children
, json.loads() , TreeNode. , JSONEncoder ( ).
TreeNode , json.loads() json.loads().
:
@staticmethod
def from_dict(dict_):
""" Recursively (re)construct TreeNode-based tree from dictionary. """
root = TreeNode(dict_['name'], dict_['children'])
root.children = list(map(TreeNode.from_dict, root.children))
return root
if __name__ == '__main__':
import json
tree = TreeNode('Parent')
tree.children.append(TreeNode('Child 1'))
child2 = TreeNode('Child 2')
tree.children.append(child2)
child2.children.append(TreeNode('Grand Kid'))
child2.children[0].children.append(TreeNode('Great Grand Kid'))
json_str = json.dumps(tree, sort_keys=True, indent=2)
print(json_str)
print()
pyobj = TreeNode.from_dict(json.loads(json_str))
print('pyobj class: {}'.format(pyobj.__class__.__name__))
print(json.dumps(pyobj, sort_keys=True, indent=2))
:
{
"children": [
{
"children": [],
"name": "Child 1"
},
{
"children": [
{
"children": [
{
"children": [],
"name": "Great Grand Kid"
}
],
"name": "Grand Kid"
}
],
"name": "Child 2"
}
],
"name": "Parent"
}
pyobj class: TreeNode
{
"children": [
... same as before ...
],
"name": "Parent"
}