【问题标题】:Attempting to return an ndb model as JSON throws: "...is not JSON serializable"尝试将 ndb 模型作为 JSON 抛出:“...不是 JSON 可序列化的”
【发布时间】:2014-04-15 15:12:59
【问题描述】:

我无法将 ndb 模型返回为 JSON。

我有一个Game类,如下:

class Game(ndb.Model):
    gameID = ndb.StringProperty
    gameState = ndb.StringProperty
    playerOne = ndb.StringProperty
    playerTwo = ndb.StringProperty
    def toJSON(self):
        jsondata = {
            "gameID" : self.key.id(),
            "gameState" : self.gameState,
            "playerOne" : self.playerOne,
            "playerTwo" : self.playerTwo
        }
        return json.encode(jsondata)

这似乎可以正常工作,并且在使用以下代码创建和存储模型时,它可以正常工作(我认为)

class gameHandler(webapp2.RequestHandler):
def get(self):
    gameID = self.request.get("gameID")
    gameState = self.request.get("gameState")
    playerOne = self.request.get("playerOne")
    playerTwo = self.request.get("playerTwo")
    game = Game(id=gameID)
    game.gameState = gameState
    game.playerOne = playerOne
    game.playerTwo = playerTwo
    game.put()
    self.response.write(game.toJSON())

在这种情况下,“self.response.write(game.toJSON())”会根据需要输出 JSON 格式的文本,例如:

 {"playerTwo":"AI","gameID":"Test2","playerOne":"Peter","gameState":"dog"}

但是,在下面的课程中,我试图简单地将游戏模型检索为 JSON,但它会抛出:

TypeError: <class 'google.appengine.ext.ndb.model.StringProperty'> is not JSON serializable

引发错误的代码:

class getGameHandler(webapp2.RequestHandler):
def get(self):
    gameID = self.request.get("gameID")
    game = Game.get_by_id(gameID)
    self.response.write(game.toJSON())

我很困惑,因为“game.toJSON()”的两个实例都应该给出相同的结果,不是吗?我的代码中是否犯了一些基本错误?

【问题讨论】:

    标签: python json google-app-engine


    【解决方案1】:

    你的语法不正确,你需要像这样声明你的 ndb 属性

    gameID = ndb.StringProperty()
    gameState = ndb.StringProperty()
    playerOne = ndb.StringProperty()
    playerTwo = ndb.StringProperty()
    

    【讨论】:

    • 这似乎已修复,谢谢!我认为它最终会成为基本的东西
    猜你喜欢
    • 2012-10-29
    • 2016-08-26
    • 2019-12-27
    • 2012-02-16
    • 1970-01-01
    • 2015-11-10
    • 2021-11-27
    • 2012-06-04
    • 2017-04-13
    相关资源
    最近更新 更多