首页 > 解决方案 > Python 和 MongoEngine,TypeError:ValidationError 类型的对象不是 JSON 可序列化的

问题描述

我正在尝试使用 python tornado 构建一个 REST API,在我将数据发布到 API“TypeError:ValidationError 类型的对象不是 JSON 可序列化”时收到此消息之前,一切都运行良好。

def post(self):
    try:
        data = convert_arguments(self.request.arguments)
        self.write(dict(result=HazardManager().create_hazard(**data)))
    except Exception as e:
        self.write(dict(error=e))

create_hazard()是与数据库建立连接的函数,它说保存我的数据并返回对象

def create_hazard(self, **data):
    try:
        hazard = HazardDB(title=data['title'], datetime=data['datetime'], location=data['location'], description=data['description'])
        hazard.commit(True) 
        return hazard.to_json()
    except Exception as e:
        return e

这里我如何在客户端调用 POST 方法,

$.ajax({
    type: "POST",
    url: 'api/v1/hazards',
    data: $('form').serialize(),
    success: function(data){
        console.log(data)
    },
    error: function(){
        console.log('error')
    }
});

标签: pythonapitornadomongoengine

解决方案


该方法self.write 尝试将您的字典转换为 JSON。但它失败了,因为它无法将 ValidationError 对象转换为 JSON 表示形式(如果开发人员未添加,大多数异常对象(如果不是全部的话)都无法转换为 JSON)。避免这种情况的简单方法是传递异常消息,而不是异常对象:

...
except Exception as e:
    self.write(dict(error=str(e)))

推荐阅读