You have problems with your code.
JSON is invalid, there is no close }to the last]
Have your units band ydo not have a setname
: node, children node, node. , { 'a': ..., 'b': ... }, [ { 'a': ... }, { 'b': ... } ].
. .., { 'x': nodeX }, 'x' - , nodeX
1 2
data = \
{ 'a': { 'children': []
, 'name': 'a'
}
, 'b': { 'children': [ { 'x': { 'children': []
, 'name': 'x'
}
}
, { 'y': { 'children': [ { 'z': { 'children': []
, 'name': 'z'
}
}
]
, 'name': 'y'
}
}
]
, 'name': 'b'
}
}
3, root node
root = \
{ 'root': { 'children': [ {k:v} for (k,v) in data.items() ]
, 'name': 'root'
}
}
4 unwrap_node
def unwrap_node (wrapped_node):
node, *_ = wrapped_node.values()
if 'children' in node and len (node['children']) > 0:
return { 'name': node['name']
, 'children': [ unwrap_node(n) for n in node['children'] ]
}
else:
return node
. traverse, () node
def traverse (node, path = []):
if 'children' in node and len (node['children']) > 0:
for n in node['children']:
yield from traverse (n, path + [ node ])
else:
yield path + [ node ]
, node name "->"
for path in traverse (unwrap_node (root)):
print (" -> ".join (node['name'] for node in path))
, print_tree, . root -> ...
def print_tree (node):
for path in traverse (unwrap_node (node)):
print (" -> ".join (n['name'] for n in path if n['name'] is not 'root'))
print_tree (root)
JSON,