2013-03-18 64 views
2

我將一些代碼從.Net移植到python。自定義Json(de)序列化?

在某一點上,我們需要將任意複雜的json從一種格式轉換爲另一種格式。

如:

{"Query": 
    { 
     "Boolean": { 
      "Operator": "And", 
      "Parameters": [ 
       {"Equal": {"Name": "Bob"}}, 
       {"Boolean": ...} 
      ] 
     } 
    } 
} 

要...

{"Query": 
    { 
     "Left": {"Name":"Bob"}, 
     "Right": {...}, 
     "Operator": "And" 
    } 
} 

我們使用Json.Net的優秀Newtonsoft.Json.JsonConverter掛鉤到串行/ deserialisation過程。我們有2 JsonConverter s從相同的對象轉換爲/從這些格式中的每一個。

Public Overrides Function CanConvert(objectType As Type) As Boolean 
    Return GetType(QueryDefinition).IsAssignableFrom(objectType) 
End Function 

這意味着我們可以挑選出我們需要手動處理,並允許股票轉換器做的一切,我們並不需要特殊對待的屬性/值的位。

Python中是否有任何等價的機制/框架?或者我將不得不手動解析每個屬性遞歸?

回答

3

您可以繼承默認的JSONEncoder。

來自:http://docs.python.org/2/library/json.html

「要使用自定義JSONEncoder亞類(例如,一個覆蓋缺省()方法來序列附加類型),與CLS kwarg指定它;否則使用JSONEncoder」。使用的

http://docs.python.org/2/library/json.html#json.JSONEncoder

實施例:Custom JSON encoder in Python 2.7 to insert plain JavaScript code

+0

感謝。你有沒有使用過的例子? ...這是很快的謝謝。當超時時間到時,我會接受 – Basic 2013-03-18 09:46:18