如何正确保存和获取Datastore中的JSON?
我正在使用Google App Engine和Python。
class Spam(db.Model)
eggs = db.TextProperty
# Create some json and store it to a Spam Entity
eggs_dict = {"large":10, "medium":5, "small":24}
eggs_json = simplejson.dumps(eggs)
spam = Spam(eggs=db.Text(eggs_json))
# Later, fetch spam and then return the json as part of a Response
self.response.out.write(spam.eggs)
当我这样做时,我得到的响应看起来像:
{"large":"10","medium":"5","small":"24"}
这是我第一次使用JSON、Python和GAE Datastore,我的问题是,这似乎是存储和获取JSON字符串的正确方法,但在我把这个设计模式应用到其他实体之前,我想确认一下这是否是一个好的模式,并且在将来不会出现数据错误。具体来说,我需要在进出Datastore时进行任何编码吗?
2 个回答
4
你现在的代码看起来不错,不过你可以考虑使用一个自定义属性,比如:JsonProperty(1) 或者 JsonProperty(2)。
这样的话,数据就会自动进行序列化和反序列化,省去你很多麻烦。
1
在把一个“字符串”(你已经把字典转成了字符串)放进AppEngine的数据存储时,其实不需要做任何编码。
我试了下面的代码,从数据存储中取回时得到了完全一样的字符串。
eggs_dict = {"large":10, "medium":5, "small":24}
eggs_json = simplejson.dumps(eggs_dict)
spam = Spam(key_name='blah')
spam.eggs = eggs_dict
db.put(spam.eggs)
new_spam = db.get(db.Key.from_path('Spam', 'blah'))
# Later, fetch spam and then return the json as part of a Response
self.response.out.write(new_spam.eggs)