【问题标题】:How to JSON encode Entities?如何对实体进行 JSON 编码?
【发布时间】:2011-07-20 20:19:12
【问题描述】:

我开始使用 Google App Engine。我想让 AJAX 聊天像 Twitter。

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))

结果:错误。服务器不可访问(get)

如何对实体进行 JSON 编码?

【问题讨论】:

    标签: python ajax json google-app-engine


    【解决方案1】:

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

    请参阅我的answer for extending db.Model,了解一些用于序列化 db.Model 实例的便捷方法

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 很方便,我之前没发现
      • 最好的部分是它在对象上寻找一个 __json__() 方法,所以如果你有特殊情况编码,你可以在那里添加它。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-09
          • 1970-01-01
          • 2011-04-08
          • 2017-05-12
          • 1970-01-01
          • 1970-01-01
          • 2010-10-09
          相关资源
          最近更新 更多