Python <;对象id>;JSON不可序列化
我正在python+Flask+marshmallow中创建一个API。 这里是类+第一个函数(我还没有使用其他函数) 我使用Postman测试了函数add_User和这个json请求:Python <;对象id>;JSON不可序列化,python,database,api,flask,marshmallow,Python,Database,Api,Flask,Marshmallow,我正在python+Flask+marshmallow中创建一个API。 这里是类+第一个函数(我还没有使用其他函数) 我使用Postman测试了函数add_User和这个json请求: { "userid" : 1, "name" : "name1", "badgenum" : "66897", "mail" : "ghh@orange.fr", "status" : "on", "admin" : "f" } 我得到了这个错误: Type
{
"userid" : 1,
"name" : "name1",
"badgenum" : "66897",
"mail" : "ghh@orange.fr",
"status" : "on",
"admin" : "f"
}
我得到了这个错误:
TypeError: <User 145> is not JSON serializable
TypeError:不可序列化JSON
用户有自己自动生成的idUser.id
,它是ObjectId。
您需要自定义json编码器来编码ObjectId字段
import json, bson
def json_response(obj, cls=None):
response = make_response(json.dumps(obj, cls=cls))
response.content_type = 'application/json'
return response
class MongoJsonEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, bson.ObjectId):
return str(obj)
return json.JSONEncoder.default(self, obj)
现在尝试调用
返回json\u响应(new\u user,cls=MongoJsonEncoder)
用户有自己的自动生成的iduser.id,即ObjectId。
您需要自定义json编码器来编码ObjectId字段
import json, bson
def json_response(obj, cls=None):
response = make_response(json.dumps(obj, cls=cls))
response.content_type = 'application/json'
return response
class MongoJsonEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, bson.ObjectId):
return str(obj)
return json.JSONEncoder.default(self, obj)
现在尝试调用返回json\u响应(新用户,cls=MongoJsonEncoder)
实际上,您有一个误导性的标题。它说不是JSON可序列化的
,然后在postTypeError中:不是JSON可序列化的
。您正在将用户对象传递给jsonify,但它接受字典之类的值。首先,您需要将用户obj转换为字典。尝试返回jsonify(name=new\u user.name)
它正在工作!!!!!很好,但我不明白你在说什么,我不能把一个对象具体化?这取决于对象。对象之间有很大的不同,一个函数不能服务于所有对象。谢谢,@Alk。将对象转换为dict对我很有用。返回jsonify(name=new_user.name)实际上,您有一个误导性的标题。它说不是JSON可序列化的
,然后在postTypeError中:不是JSON可序列化的
。您正在将用户对象传递给jsonify,但它接受字典之类的值。首先,您需要将用户obj转换为字典。尝试返回jsonify(name=new\u user.name)
它正在工作!!!!!很好,但我不明白你在说什么,我不能把一个对象具体化?这取决于对象。对象之间有很大的不同,一个函数不能服务于所有对象。谢谢,@Alk。将对象转换为dict对我很有用。返回jsonify(name=new\u user.name)