如何摆脱来自 flask/mongoengine 的 json 响应中的数据类型

How to get rid of the datatype in json response from flask/mongoengine

我正在使用 flask 开发应用程序后端

当我 return 响应时,一些数据类型与值一起包含在其中。这是 return 文档值

的一些逻辑示例代码
def single_user(user_id):
    user = users.read(user_id)
    if user:
        return {
            'success': True,
            'user': user,
        }, 200
    return {
        'success': False,
        'message': 'User not found',
    }, 404

我的用户模型就是这样

from datetime import datetime

import mongoengine as me


class User(me.Document):
    phone = me.StringField()
    email = me.EmailField()
    password = me.StringField()
    accountType = me.StringField()
    createdAt = me.DateTimeField(default=datetime.now())
    updatedAt = me.DateTimeField(default=datetime.now())
    profil = me.EmbeddedDocumentField(Profil)

    meta = {
        'collection': 'users',
        'strict': False,
    }

这里是响应的示例输出

{
    "success": true,
    "user": {
        "_id": {
            "$oid": "5dc968e2e50cca5af0ba50cc"
        },
        "createdAt": {
            "$date": 1573491186501
        },
        "profil": {
            "checked": false,
            "followerList": [
                {
                    "$oid": "5dc96268788964480d6a2a8a"
                }
            ],
            "followingList": [],
            "playpoint": 15
        },
        "updatedAt": {
            "$date": 1573491186501
        }
    }
}

这很好,但是有没有办法从输出中删除“$oid”和“$date”并只获取值?

我认为这是 python 的事情,因为当我尝试从 nodejs 等效后端提供这些数据时,我只有 "id"、"createdAt" 和 [=34 中的值=].

编辑:这将是所需的输出

{
    "success": true,
    "user": {
        "_id": "5dc968e2e50cca5af0ba50cc",
        "createdAt": 1573491186501,
        "profil": {
            "checked": false,
            "followerList": [
                "5dc96268788964480d6a2a8a"
            ],
            "followingList": [],
            "playpoint": 15
        },
        "updatedAt": 1573491186501
    }
}

与 MongoEngine 的工作方式有关。这就是返回这些字段的原因。解决它的唯一方法是自己映射字段。

def single_user(user_id):
    user = users.read(user_id)
    if user:
        mappedUser = {
            '_id': user['_id']['$oid'],
            'createdAt': user['createdAt']['$date'],
            ...
        }
        return {
            'success': True,
            'user': mappedUser,
        }, 200
    return {
        'success': False,
        'message': 'User not found',
    }, 404

额外提示:Flask-Restplus(附加库)支持 "marshaling" 响应,这基本上就是您想要做的。