我在 App Engine 数据存储区中有一个大型分层数据集。通过将数据存储在实体组中来保留层次结构,这样我就可以通过简单地知道顶部元素键来拉整棵树,如下所示:
query = db.Query().ancestor(db.get(key))
问题:我现在如何将此数据输出为 JSON 并保留层次结构?
Google 有一个名为 GqlEncoder 的实用程序类,它为 simplejson 添加了对数据存储查询结果的支持,但它基本上将数据扁平化,破坏了层次结构。
有什么建议么?
我在 App Engine 数据存储区中有一个大型分层数据集。通过将数据存储在实体组中来保留层次结构,这样我就可以通过简单地知道顶部元素键来拉整棵树,如下所示:
query = db.Query().ancestor(db.get(key))
问题:我现在如何将此数据输出为 JSON 并保留层次结构?
Google 有一个名为 GqlEncoder 的实用程序类,它为 simplejson 添加了对数据存储查询结果的支持,但它基本上将数据扁平化,破坏了层次结构。
有什么建议么?
我想你指的是这段代码,你提到的“扁平化”是由第 51-52 行完成的:
if isinstance(obj, db.GqlQuery):
return list(obj)
而其余的代码可以满足您的目的。那么,您希望如何表示 GQL 查询,因为您不知道它包含的对象的 JS 数组(Python 列表)是什么?目前尚不清楚,除了实体组(您正在完全恢复)之外,是什么赋予了它层次结构;是“父母”的问题吗?
无论如何,一旦澄清了这一点,将该文件复制并编辑到您自己的代码中似乎是最好的(它的设计目的不是让您只覆盖一个花絮)。