2013-03-26 16 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 

이 괜찮습니다,하지만 문제는 올바른 그것을하지 않습니다 이것에 대한/FOLDER3/실 거예요 작업 파이썬, 폴더 1/폴더, 나는 재귀 함수가 필요

+0

가 왜 JPG는'의 자식 OY00' 부모가'0RkE' 일 때? – Kevin

답변

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

관련 문제