如何JSON编码实体?

时间:2011-03-22 21:03:25

标签: python ajax json google-app-engine

我开始使用Google App Engine了。我想像Twitter一样进行AJAX聊天。

class ChatMessage(db.Model):
  message = db.StringProperty()
  created = db.DateTimeProperty(auto_now=True)

服务器JSON对响应进行编码,

class RPCHandler(webapp.RequestHandler):
  def get(self):
    chat_list = {'message':'Hello!'}
    self.response.out.write(simplejson.dumps(chat_list))

结果:你好!

这没关系。但是替换RPCHandler

class RPCHandler(webapp.RequestHandler):
  def get(self):
    newchat = ChatMessage(message="Hi!")
    newchat.put()
    que = db.Query(ChatMessage).order('-created')
    chat_list = que.fetch(limit=1)

    self.response.out.write(simplejson.dumps(chat_list))

结果:错误。服务器无法访问(获取)

我如何对实体进行JSON编码?

4 个答案:

答案 0 :(得分:3)

在App Engine Python中,您可以使用此脚本将db.Models编码为JSON。您可能必须自定义某些部分,例如DateTime格式。

http://code.google.com/p/google-app-engine-samples/source/browse/trunk/geochat/json.py?r=55

答案 1 :(得分:1)

您不能直接在db.Model项列表中使用simplejson.dumps()。

使用一些方便的方法来查看我的answer for extending db.Model,以便序列化db.Model实例

答案 2 :(得分:0)

我将gson用于GAE / J.你可以给它一个对象(或者在你的情况下,从结果集中提取东西)并获得一个JSON字符串。

答案 3 :(得分:0)

检查应用引擎的错误日志。它会告诉你它遇到了什么错误。可能你正在尝试编码一个它不熟悉的json的Python类型。 JSON只会执行列表和词典之类的简单操作。您无法将其用于复杂的自定义类型。