2014-10-07 78 views
1

json.dumps(o)轉換原來的Python對象JSON
o.to_json()轉換一個mongoengine對象,如Document到JSONJSON序列化Python和mongoengine對象混合

怎樣把混合的對象?
例如python dict,以mongoengine對象作爲它的值?

這是否有工具?或者我應該創建一個自定義類JSONEncoder

如果我重寫編碼器,我可以創建也重建mongoengine對象解碼器?

回答

1

下面的編碼序列化的python \ mongoengine對象混合

import json 
from mongoengine.base import BaseDocument 

class MongoengineObjectsJsonEncoder(json.JSONEncoder): 
    def default(self, o): 
     if isinstance(o, BaseDocument): 
      return o._data 
     elif isinstance(o, datetime): 
      return o.isoformat() 
     else: 
      return json.JSONEncoder.default(self, o) 

注:

  • 此編碼器不添加關於蟒蛇 對象到底哪裏和mongoengine對象開始任何簽名,因此它可以「T是 自動正確反序列化爲蟒\ mongoengine目的, 而是將反序列化到單個Python對象
  • 我還添加了datetime對象序列化到ISO 8601格式
+1

這是行不通的,默認JSON編碼器不能處理蒙戈的數據類型正確的BSON是JSON的超類型。 MongoEngine只是使用pymongo(請參閱bson.json_utils)來編碼單個對象或查詢集,因此您應該將其用於文檔,例如:'return json_utils.dumps(o.to_mongo())' – Ross 2014-10-07 13:27:39

+0

@Ross - 您的意思是代替特定行'return o._data'? – Jonathan 2014-10-07 16:49:09

+0

@Ross - 假設上面的評論是肯定的,AFAIK如果default()返回一個'str'而不是'dict',那麼在解碼後面的整個對象將保持爲一個字符串,所以你的意思可能是'return o .to_mongo()' – Jonathan 2014-10-07 16:57:47