如何将App Engine Datastore中的层次数据输出为JSON?
我在App Engine的数据库里有一个很大的层级数据集。为了保持这个层级结构,我把数据存储在实体组里,这样我只需要知道顶层元素的键,就可以轻松获取整个树形结构,代码是这样的:
query = db.Query().ancestor(db.get(key))
现在的问题是:我该如何将这些数据输出为JSON格式,并且保持层级结构呢?
谷歌有一个叫做GqlEncoder的工具类,它可以让简单的JSON处理支持数据库查询结果,但它基本上会把数据压平,导致层级结构被破坏。
有没有什么建议呢?
1 个回答
1
我想你提到的是这段代码,你说的“扁平化”是指第51到52行的内容:
if isinstance(obj, db.GqlQuery):
return list(obj)
而其余的代码对于你的目的来说是没问题的。那么,你想怎么表示一个GQL查询呢?因为你并不知道它包含的对象是一个JS数组(Python列表)。除了你完全恢复的实体组之外,什么让它有层次感并不清楚;这是不是和“父级”有关呢?
不管怎样,一旦这些问题明确了,把这个文件复制并编辑到你自己的代码里似乎是最好的选择(因为它并不是为了让你只覆盖那一小部分而设计的)。