如何将App Engine Datastore中的层次数据输出为JSON?

1 投票
1 回答
1264 浏览
提问于 2025-04-15 13:42

我在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列表)。除了你完全恢复的实体组之外,什么让它有层次感并不清楚;这是不是和“父级”有关呢?

不管怎样,一旦这些问题明确了,把这个文件复制并编辑到你自己的代码里似乎是最好的选择(因为它并不是为了让你只覆盖那一小部分而设计的)。

撰写回答