2013-03-18 65 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