Sorting JSON object(s) into a Hierarchy

后端 未结 4 948
感情败类
感情败类 2021-01-06 10:57

I need to sort out a JSON array into a Hierarchy, here my JSON file, it\'s never ordered but follow structure:

{
  \"name\":\"Folder 2\",
  \"id\":\"zRDg\",
         


        
4条回答
  •  醉梦人生
    2021-01-06 11:38

    How about using something like the Python networkx library?

    import json
    #networkx is a library for working with networks and trees
    import networkx as nx
    #The json_graph routines print out JSONic representations of graphs and trees
    #http://networkx.github.com/documentation/latest/reference/readwrite.json_graph.html
    from networkx.readwrite import json_graph
    
    dd='[{ "name":"Folder 2", "id":"zRDg", "parent":"OY00", "type":"folder"},{ "name":"Folder 1", "id":"OY00", "type":"folder"},{"name":"Folder 3", "id":"ZDE1", "type":"folder"},{ "name":"DX00025.jpg", "id":"9Xdd", "parent":"OY00", "type":"jpeg"}]'
    d=json.loads(dd)
    
    #A tree is a directed graph - create one with a dummy root
    DG=nx.DiGraph()
    DG.add_node('root')
    
    #Construct the tree as a directed graph and annotate the nodes with attributes
    #Edges go from parent to child
    for e in d:
      DG.add_node(e['id'],name=e['name'],type=e['type'])
      #If there's a parent, use it...
      if 'parent' in e: DG.add_edge(e['parent'],e['id'])
      #else create a dummy parent from the dummy root
      else: DG.add_edge('root',e['id'])
    
    #Get the tree as JSON
    data = json_graph.tree_data(DG,root='root')
    #and dump the data from the dummy root's children down...
    json.dumps(data['children'])
    
    '''
    '[{"children": [{"type": "folder", "name": "Folder 2", "id": "zRDg"}, {"type": "jpeg", "name": "DX00025.jpg", "id": "9Xdd"}], "type": "folder", "name": "Folder 1", "id": "OY00"}, {"type": "folder", "name": "Folder 3", "id": "ZDE1"}]'
    '''
    

提交回复
热议问题