मुझे लगता है कि आपका स्ट्रिंग फॉर्म वास्तव में पायथन प्रतिनिधित्व जैसा दिखता है...
s = '{"_id": {"$oid": "4edebd262ae5e93b41000000"}}'
u = json.loads(s, object_hook=json_util.object_hook)
print u # Result: {u'_id': ObjectId('4edebd262ae5e93b41000000')}
s = json.dumps(u, default=json_util.default)
print s # Result: {"_id": {"$oid": "4edebd262ae5e93b41000000"}}
ऐसा लगता है कि bson.json_util.object_hook फ़ंक्शन में वास्तविक json स्ट्रिंग प्रस्तुति में ObjectId() होने के लिए किसी भी प्रकार की हैंडलिंग नहीं है।