自定义Json(反)序列化?

2 投票
1 回答
627 浏览
提问于 2025-04-17 19:29

我正在把一些代码从 .Net 转到 Python。

在某个时候,我们需要把复杂的 JSON 从一种格式转换成另一种格式。

比如:

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

转换成...

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

我们之前使用 Json.Net 提供的很棒的 Newtonsoft.Json.JsonConverter 来处理序列化和反序列化的过程。我们有两个 JsonConverter,可以在这两种格式之间转换相同的对象。

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

这意味着我们可以手动处理我们想要的部分,而让默认的转换器处理那些我们不需要特别处理的属性和数值。

在 Python 中有没有类似的机制或框架?还是说我必须递归地手动解析每一个属性?

1 个回答

4

你可以创建一个自己的 JSONEncoder 类。

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

"如果你想使用一个自定义的 JSONEncoder 类(比如说,重写 default() 方法来处理额外的数据类型),可以通过 cls 这个参数来指定;如果不指定,就会使用默认的 JSONEncoder。"

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

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

撰写回答