Python GAE NDB结构化列表转换为Json

Python GAE NDB结构化列表转换为Json,python,json,database,google-app-engine,app-engine-ndb,Python,Json,Database,Google App Engine,App Engine Ndb,我最近从ext.db切换到新的NDB,遇到了一些困难 我想将结构化列表转换为Json包,以便发送到iPhone应用程序。我得到了“NotJSON serializable”错误。我想打包,以便所有用户喜欢的水果都转换为Json。如果用户喜欢苹果、橘子和草莓,那么在Json的收藏夹字段中(代码下方)应该有所有三种水果以及相关的分数和评论 我知道存在,以及jsonProperty,但我不知道如何应用(如果适用) 以下是我所拥有的: class FavFruits(ndb.Model): fr

我最近从ext.db切换到新的NDB,遇到了一些困难

我想将结构化列表转换为Json包,以便发送到iPhone应用程序。我得到了“NotJSON serializable”错误。我想打包,以便所有用户喜欢的水果都转换为Json。如果用户喜欢苹果、橘子和草莓,那么在Json的
收藏夹
字段中(代码下方)应该有所有三种水果以及相关的分数和评论

我知道存在,以及jsonProperty,但我不知道如何应用(如果适用)

以下是我所拥有的:

class FavFruits(ndb.Model):
    fruit    = ndb.StringProperty()
    score    = ndb.IntegerProperty()
    comment  = ndb.TextProperty()

 class UserProfile(ndb.Model):
    uid            = ndb.StringProperty(required=True)
    favFruits      = ndb.StructuredProperty(FavFruits, repeated=True)

 @classmethod
 def makeJsonPackage(cls, uid):
      fruitList = UserProfile.query(UserProfile.uid == uid).get()
            entry = {}
            entry["uid"]           = fruitList.uid
            entry["favorites"]     = fruitList.favFruits
            return (entry)

 # down stream of the code
 jsonData = UserProfile.makeJsonPackage(uid)
 self.response.write(json.dumps(jsonData))
这行不通。。问题出现在
entry[“favorites”]=fruits.favFruits
上,因为我在将结构化列表转换为Json数据时遇到问题

目标:发送整个
favFruits
条目列表(多个水果)。我想保留structuredList,因为我想在用户请求时查询数据,比如说“apple”,这样我就可以显示水果(apple)以及相关的分数和评论

任何帮助都将不胜感激。

基于 而且,下面的代码应该可以工作

返回包含模型属性值的dict。属性值 对于StructuredProperty和LocalStructuredProperty,它们是递归的 翻译成字典

更新1 额外:使用端点 因为您希望使用AppEngine作为移动应用程序的后端api服务器。首先检查端点API,它是专门为这种用途设计的

基于端点,有一个名为endpoints Proto Datastore API的google支持包。为ndb模型和端点提供更直接的连接。刚开始有点难,但当你了解了它的工作原理后,它非常强大,可以节省很多时间

更新2: 编辑1: 我为ndb模型编写了一个RESTFul api生成器

# generate restful api in one line
BigDataLab = EndpointRestBuilder(GPCode).build(
    api_name="BigDataLab",
    name="bigdatalab",
    version="v1",
    description="My Little Api"
)

回购:

感谢您的投入。我尝试了建议的更改,但在获得AttributeError时仍然存在问题:“list”object没有属性“to dict”我的实际数据库还有其他列,如
LoginDatime
,我不想将其放入JSON包中。有可能这样做吗?我需要转换为dict的是
favFruits
条目,而不是
uid
,或者我缺少什么?另外,感谢您对端点的建议;我一定会调查这个生产现场。
userPorfile = UserProfile.query(UserProfile.uid == uid).get()
return json.dumps([k.to_dict() for k in userProfile.favFruits])
# generate restful api in one line
BigDataLab = EndpointRestBuilder(GPCode).build(
    api_name="BigDataLab",
    name="bigdatalab",
    version="v1",
    description="My Little Api"
)