2009-08-19 5 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配列(Pythonリスト)がないからです。エンティティグループ(あなたが完全に回復している)のほかに、それが階層を与えるものは明らかではありません。それは "親"の問題ですか?それは明らかだ後

とにかく、自分のコードの中にファイルのコピーや編集が(あなたがちょうどその1ちらほらを上書きできるように設計されていない)最高のようです。

+0

これは '親'の問題で、それを階層として許可しています。 私は既存のライブラリを変更することができましたが、既にサポートしているライブラリがあるかどうかを最初に確認します。 – Christian

+0

@Christian、良い考えですが、私はそれを知りません。私はあなたが別のメソッドにそのリスト(obj)の使用を抽出することをお勧めしますベースクラスは変更されていない機能を持つことができ、サブクラスはメソッドをオーバーライドし、必要な余分な処理を実行する(私はあなたがリストの入れ子リスト?)、ベースクラスの機能の99%を再利用しています。そのようなパッチは、アプリエンジンのオープンソースの部分に受け入れられる可能性があり、将来あなた自身で保守する必要はありません。 –

関連する問題