2011-03-22 119 views
0

我正在开始使用Google App Engine。我想让Twitter这样的AJAX聊天。如何对实体进行JSON编码?

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如何对实体进行编码?

回答

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

+0

得心应手一些方便的方法,我不认为发现以前 – 2011-03-22 21:18:43

+0

最好的部分是,它看起来对对象__json __()方法,所以如果你有特殊情况编码你可以在那里添加它。 – Calvin 2011-03-22 21:20:55

0

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

0

检查应用程序引擎的错误日志。它会告诉你它遇到了什么错误。可能你正试图编码一个json不熟悉的Python类型。 JSON只能做简单的东西,比如列表和字典。您不能将其用于复杂的自定义类型。