2009-08-19 2 views
1

App Engine Datastore에 큰 계층 적 데이터 세트가 있습니다. 계층 구조는 단순히 그래서 같은 최상위 요소 키를 아는하여 전체 트리를 당길 수 있도록, 엔티티 그룹의 데이터를 저장하여 보존 :App Engine Datastore에서 JSON으로의 계층 적 데이터 출력?

query = db.Query().ancestor(db.get(key))

질문 : 어떻게 출력에게 지금이 데이터 등을 JSON 및 계층 구조를 유지 하시겠습니까?

Google에는 simplejson에 데이터 저장소 쿼리 결과에 대한 지원을 추가하는 GqlEncoder라는 유틸리티 클래스가 있지만 기본적으로 데이터를 병합하여 계층을 파괴합니다.

제안 사항? 코드의 나머지 부분은 사용 목적에 괜찮

if isinstance(obj, db.GqlQuery): 
     return list(obj) 

동안 :

답변

1

난 당신이 this code를 참조하고, 당신은 라인 51 ~ 52에 의해 이루어집니다 언급 "병합"하고 상상한다. 그렇다면 GQL 쿼리를 어떻게 표현할 것인가? 포함 된 객체의 JS 배열 (파이썬 목록)이 아니기 때문이다. 엔티티 그룹 (당신이 완전히 회복하고있는 것) 외에 무엇이 계층 구조를 제공하는지 명확하지 않습니다. 그것은 "부모"의 문제입니까?

어쨌든 명확 해지면 해당 파일을 자신의 코드로 복사하고 편집하는 것이 가장 좋습니다 (단 하나의 재미있는 이야기를 덮어 쓸 수 있도록 설계되지 않았습니다).

+0

'상위'의 문제이며 계층 구조로 허용됩니다. 기존 라이브러리를 수정할 수는 있지만 이미 지원 한 라이브러리가 있는지 여기에서 먼저 확인하겠습니다. – Christian

+0

@Christian, 좋은 생각이지만, 나는 하나도 몰라. 나는 그'list (obj)'를 별도의 메소드로 추출하여 기본 클래스가 변경되지 않은 기능을 가질 수 있고 서브 클래스가 메소드를 오버라이드하고 필요한 추가 처리를 수행 할 수 있도록 제안한다. (당신이 중첩 된 list-of-list ?), 기본 클래스의 기능 중 99 %를 다시 사용하는 등 - 패치가 앱 엔진의 오픈 소스 부분에 채택 될 수 있으며 이후에 직접 유지 관리하지 않아도됩니다. –

관련 문제