【问题标题】:Custom Json (de)serialisation?自定义Json(反)序列化?
【发布时间】:2013-03-18 09:40:57
【问题描述】:

我正在将一些代码从 .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 中是否有任何等效的机制/框架?还是我必须手动递归地解析每个属性?

【问题讨论】:

    标签: python json


    【解决方案1】:

    您可以继承默认的 JSONEncoder。

    发件人:http://docs.python.org/2/library/json.html

    “要使用自定义 JSONEncoder 子类(例如,覆盖 default() 方法以序列化其他类型的子类),请使用 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

    【讨论】:

    • 谢谢。你有使用的例子吗? ......那很快谢谢。超时后我会接受
    猜你喜欢
    • 1970-01-01
    • 2011-04-12
    • 2013-01-18
    • 2014-08-02
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 2015-02-17
    相关资源
    最近更新 更多