2015-12-17 6 views
1

Это моя структура Dict, я не могу перебирать весь Dict найти ObjectId в качестве значения Мои Входные данные:Iterate Python ДИКТ преобразовать Монго ObjectId в строку, если значение 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 значения в ул

Ожидаемый 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" 
     } 
    ] 

}

ответ

-1

вы можете попробовать это:

... 
from bson import ObjectId 

... 
def todict(self, data, obj=None): 
    for key in data: 
     if isinstance(data[key], ObjectId): 
      obj[key]=str(data[key]) 
... ... 
+0

Это проверено на ubuntu14.04, python2 .7.6, pymongo 2.9, Он работает. –