2

我正在将一些代码从 .Net 移植到 python。

在某一时刻,我们需要将任意复杂的 json 从一种格式转换为另一种格式。

例如:

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

到...

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

我们使用 Json.Net 的优秀Newtonsoft.Json.JsonConverter来连接到序列化/反序列化过程。我们有 2 JsonConverters 从相同的对象转换到/从这些格式中的每一种。

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

这意味着我们可以手动挑选出我们想要处理的位,并允许库存转换器处理我们不需要特别处理的所有属性/值。

Python中是否有任何等效的机制/框架?还是我必须手动递归地解析每个属性?

4

1 回答 1

4

您可以对默认 JSONEncoder 进行子类化。

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

“要使用自定义 JSONEncoder 子类(例如,覆盖 default() 方法以序列化其他类型的子类),请使用 cls kwarg 指定它;否则使用 JSONEncoder。”

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

使用示例:Python 2.7 中的自定义 JSON 编码器插入纯 JavaScript 代码

于 2013-03-18T09:42:08.663 回答