2013-07-29 35 views
0

我目前使用json.dumps()將我的自定義對象序列化爲JSON字符串。轉儲前的json.dump對象重命名屬性

j = json.dumps(object, sort_keys=True, indent=4, separators=(',', ': '), 
       default=lambda o: o.__dict__) 

我的對象有一個屬性,稱爲_machines。因此,當我們將對象轉換爲字符串時,字符串中的一個屬性稱爲_machines。有什麼辦法可以告訴json.dump()我們希望這個屬性被稱爲machines而不是_machines

回答

2

你必須使用一個更精細的默認:

json.dumps(object, sort_keys=True,indent=4, separators=(',', ': '), 
      default=lambda o: {'machines' if k == '_machines' else k: v for k, v in o.__dict__.iteritems()}) 

這可能是一個好主意,爲便於閱讀的緣故,要做出一個單獨的函數:

def serialize_custom_object(o): 
    res = o.__dict__.copy() 
    res['machines'] = res['_machines'] 
    del res['_machines'] 
    return res 

json.dumps(object, sort_keys=True,indent=4, separators=(',', ': '), 
      default=serialize_custom_object) 

這裏,serialize_custom_object()稍微更加明確一點,即您正在重命名結果中的一個鍵。

+0

只是一個快速的評論我在python3做這個。所以__dict __。iteritems()不再存在。因此,該部分應該變成__dict __。items(),除非它完美地工作,非常感謝 – zidsal

+1

是的,我的確在假設Python 2,並且忘記添加關於在3上使用'dict.items()'的通常免責聲明。 –