Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python <;对象id>;JSON不可序列化_Python_Database_Api_Flask_Marshmallow - Fatal编程技术网

Python <;对象id>;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

我正在python+Flask+marshmallow中创建一个API。 这里是类+第一个函数(我还没有使用其他函数)

我使用Postman测试了函数add_User和这个json请求:

{

    "userid" : 1,
    "name" : "name1",
    "badgenum" : "66897",
    "mail" : "ghh@orange.fr",
    "status" : "on",
    "admin" : "f"

}
我得到了这个错误:

TypeError: <User 145> is not JSON serializable
TypeError:不可序列化JSON

用户有自己自动生成的id
User.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)
用户有自己的自动生成的id
user.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可序列化的
,然后在post
TypeError中:不是JSON可序列化的
。您正在将用户对象传递给jsonify,但它接受字典之类的值。首先,您需要将用户obj转换为字典。尝试
返回jsonify(name=new\u user.name)
它正在工作!!!!!很好,但我不明白你在说什么,我不能把一个对象具体化?这取决于对象。对象之间有很大的不同,一个函数不能服务于所有对象。谢谢,@Alk。将对象转换为dict对我很有用。返回jsonify(name=new_user.name)实际上,您有一个误导性的标题。它说
不是JSON可序列化的
,然后在post
TypeError中:不是JSON可序列化的
。您正在将用户对象传递给jsonify,但它接受字典之类的值。首先,您需要将用户obj转换为字典。尝试
返回jsonify(name=new\u user.name)
它正在工作!!!!!很好,但我不明白你在说什么,我不能把一个对象具体化?这取决于对象。对象之间有很大的不同,一个函数不能服务于所有对象。谢谢,@Alk。将对象转换为dict对我很有用。返回jsonify(name=new\u user.name)