如何正确保存和获取Datastore中的JSON?

0 投票
2 回答
2766 浏览
提问于 2025-04-16 12:34

我正在使用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)

撰写回答