如何从数据存储中正确保存和获取JSON?

时间:2011-02-26 03:07:34

标签: python json google-app-engine

我正在使用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数据存储区,我的问题是这似乎是存储和获取JSON字符串的正确方法,但在我将此设计模式提交给其他实体之前,我想看看这是一个好的模式,并且不会出现任何数据错误。具体来说,我需要在进出数据存储区的路上执行任何编码吗?

2 个答案:

答案 0 :(得分:4)

您所看到的内容看起来不错,但也许您应该考虑使用自定义属性,例如:JsonProperty(1)JsonProperty(2)

这样就可以为您自动序列化/反序列化数据。

答案 1 :(得分: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)