1

这是我的 Dict 结构,我无法迭代整个 dict 以查找 ObjectId 作为值我的输入数据:

 {
"_id" : ObjectId("5671947d29c23846797d836a"),
"event_version" : "1.0",
"event_time" : ISODate("2015-12-16T16:42:37.501Z"),
"event_name" : "Create_Assignment",
"user_id" : "admin",
"tenant" : "Demo_Tenant",
"sourceIPAddress" : "",
"user_agent" : "",
"request_parameters" : {
    "username" : "admin",
    "status" : "active",
    "first_name" : "",
    "last_name" : "",
    "is_deleted" : false,
    "updated_by" : "admin",
    "roles" : [ 
        {
            "_ref" : {
                "$ref" : "role",
                "$id" : ObjectId("5671947d29c23846797d8362")
            },
            "_cls" : "Role"
        }, 
        {
            "_ref" : {
                "$ref" : "role",
                "$id" : ObjectId("5671947d29c23846797d8366")
            },
            "_cls" : "Role"
        }
    ]

}

我努力了 :

def todict(self, data, obj=None):
    for key in data:
        if isinstance(data[key], (ObjectId)):
            print '>>>>>>>>>>', data[key]
            obj[key]=str(data[key])
        else:
            if not isinstance(data[key], (str, unicode, list, datetime, bool)):
                self.todict(data[key],obj)
            else:
                obj[key]=data[key]
    return obj

但这不能正常工作。我需要递归函数将所有 ObjectID 值转换为 str

预期的 JSON:

 {
"_id" : "5671947d29c23846797d836a",
"event_version" : "1.0",
"event_time" : ISODate("2015-12-16T16:42:37.501Z"),
"event_name" : "Create_Assignment",
"user_id" : "admin",
"tenant" : "Demo_Tenant",
"sourceIPAddress" : "",
"user_agent" : "",
"request_parameters" : {
    "username" : "admin",
    "status" : "active",
    "first_name" : "",
    "last_name" : "",
    "is_deleted" : false,
    "updated_by" : "admin",
    "roles" : [ 
        {
            "_ref" : {
                "$ref" : "role",
                "$id" : "5671947d29c23846797d8362"
            },
            "_cls" : "Role"
        }, 
        {
            "_ref" : {
                "$ref" : "role",
                "$id" : "5671947d29c23846797d8366"
            },
            "_cls" : "Role"
        }
    ]

}

4

1 回答 1

-2

你可以试试这个:

...
from bson import ObjectId

...
def todict(self, data, obj=None):
    for key in data:
        if isinstance(data[key], ObjectId):
            obj[key]=str(data[key])
... ...
于 2015-12-17T08:32:23.560 回答