2013-03-26 52 views
0

我需要理清一个JSON阵列成层次结构,在这里我的JSON文件从未orderd而是遵循结构:循环通过JSON数组和排序它

{ 
    "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" 
} 

进入这个:

{ 
    "name":"Folder 1", 
    "id":"OY00", 
    "type":"folder", 
    "children": [{ 
    "name":"Folder 2", 
    "id":"zRDg", 
    "type":"folder" 
    }, 
    { 
    "name":"DX00025.jpg", 
    "id":"9Xdd", 
    "type":"jpeg" 
    }] 
}, 
{ 
    "name":"Folder 3", 
    "id":"ZDE1", 
    "type":"folder" 
} 

我真的不能随它去,因为我是新来的蟒蛇,我开始(错误):

for index,item in result: 
    if item['parent']: 
     for item2 in result: 
      if item2['id'] == item['parent']: 
       item['children'] = item2 
       brake 

这是确定的,但问题是它不正确蟒蛇,文件夹1 /文件夹本/ folder3 /无法正常工作,我需要一个递归函数

+0

为什么是JPG的'孩子OY00'当它的父母是'0RkE'? – Kevin 2013-03-26 12:27:51

回答

1

我对这种情况下的解决方案是这样的:

data = INPUT_LIST 

class Item: 
    def __init__(self, _id, name, type, parent): 
     self._id = _id 
     self.name = name 
     self.type = type 
     self.parent = parent 
     self.children = [] 

    def get_dict(self): 
     return { 
      'id': self._id, 
      'name': self.name, 
      'type': self.type, 
      'children': [child.get_dict() for child in self.children] 
     } 


lookup = dict((item['id'], Item(item['id'], item['name'], item['type'], item['parent'] if 'parent' in item else None)) for item in data) 

root = [] 

for _id, item in lookup.items(): 
    if not item.parent: 
     root.append(item) 
    else: 
     lookup[item.parent].children.append(item) 

dict_result = [item.get_dict() for item in root] 
+0

你可以将它复制到这个线程,我会奖励你150分,你应得的。 http://stackoverflow.com/questions/15544581/sorting-json-objects-into-a-hierarchy 也删除这篇文章,谢谢。 – Kivylius 2013-03-26 12:34:11