2011-03-22 113 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只能做簡單的東西,比如列表和字典。您不能將其用於複雜的自定義類型。