Jed*_*edi 1 python google-app-engine json
我试图从应用程序引擎中的数据存储区发送10条最新帖子.
这是数据库:
class Author(ndb.Model):
"""Sub model for representing an author."""
identity = ndb.StringProperty(indexed=False)
email = ndb.StringProperty(indexed=True)
class Message(ndb.Model):
"""A main model for representing an individual Message entry."""
author = ndb.StructuredProperty(Author)
content = ndb.StringProperty(indexed=False)
date = ndb.DateTimeProperty(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
这是代码:
class Query(webapp2.RequestHandler):
def post(self):
message_name = self.request.get('db_name',
DEFAULT_KEY)
message_query = Message.query(ancestor=db_key(
message_name)).order(-Message.date)
messages = message_query.fetch(10)
items = []
for message in message_query:
items.append({'id': message.author.identity,
'email':message.author.email,
'content':message.content,
'date':message.date})
self.response.headers['Content-Type'] = 'application/json'
self.response.out.write(json.dumps(items))
Run Code Online (Sandbox Code Playgroud)
和错误消息:
TypeError: datetime.datetime(2015, 3, 21, 15, 43, 58, 248650) is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
为什么不能让JSON返回该格式的日期?我如何将其重新格式化为正确的JSON格式?
BR
我建议不要重新发明轮子,而是建议在https://gist.github.com/erichiggins/8969259上安装和使用ndb_json.py模块- 它代表你强有力地优雅地处理各种潜在的陷阱和陷阱.那ndb_json.dumps就是你需要的一切.
但请注意,您发布的代码中存在一个特殊的异常...:
message_query = Message.query(ancestor=db_key(
message_name)).order(-Message.date)
messages = message_query.fetch(10)
items = []
for message in message_query:
items.append(...)
Run Code Online (Sandbox Code Playgroud)
这会将最新的10条消息提取到messages列表中,然后您完全忽略它!然后所有较旧的消息(来自查询的循环)都会被置于items无限数字中.我怀疑这实际上是你想要的 - 也许你的意思for是:
for message in messages:
items.append(...)
Run Code Online (Sandbox Code Playgroud)
序列化响应"只是最新的10条消息",而不是" 除了最新10 条之外的所有消息",这是你的代码所做的.
所以,如果是这种情况,我建议您使用模块避免所有"构建items"部分,只需更换
self.response.out.write(json.dumps(items))
Run Code Online (Sandbox Code Playgroud)
同
self.response.write(ndb_json.dumps(messages))
Run Code Online (Sandbox Code Playgroud)
(另请注意,该out部件是遗留工件/黑客,用于向后兼容古老版本webapp并且最好不在新应用程序中使用 - 与您的Q没有直接关系,但就像我认为您在序列化中可能遇到的错误一样"查询的其余部分"而不是"最新的10条消息",希望对您有所帮助! - )
| 归档时间: |
|
| 查看次数: |
1095 次 |
| 最近记录: |