Python GAE NDB结构化列表转换为Json
我最近从ext.db切换到新的NDB,遇到了一些困难 我想将结构化列表转换为Json包,以便发送到iPhone应用程序。我得到了“NotJSON serializable”错误。我想打包,以便所有用户喜欢的水果都转换为Json。如果用户喜欢苹果、橘子和草莓,那么在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
收藏夹
字段中(代码下方)应该有所有三种水果以及相关的分数和评论
我知道存在,以及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"
)