相关疑难解决方法(0)

使用常规编码器使对象JSON可序列化

JSON序列化自定义非可序列化对象的常规方法是子类化json.JSONEncoder,然后将自定义编码器传递给转储.

它通常看起来像这样:

class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, foo):
            return obj.to_json()

        return json.JSONEncoder.default(self, obj)

print json.dumps(obj, cls = CustomEncoder)
Run Code Online (Sandbox Code Playgroud)

我正在尝试做的是使用默认编码器进行序列化.我环顾四周但找不到任何东西.我的想法是编码器会看到一些字段来确定json编码.类似的东西__str__.也许是一个__json__领域.在python中有这样的东西吗?

我想制作一个模块的类,我正在使用JSON序列化给使用该软件包的每个人,而不必担心实现他们自己的[普通]自定义编码器.

python serialization json monkeypatching

59
推荐指数
3
解决办法
6万
查看次数

使用枚举名称而不是值对 Pydantic 字段进行编码

我有一个枚举类:

class Group(enum.Enum):
    user = 0
    manager = 1
    admin = 2
Run Code Online (Sandbox Code Playgroud)

我有一个 pydantic 模型:

class User(BaseModel):
    id: int
    username: str
    group: Group
Run Code Online (Sandbox Code Playgroud)

它生成序列化为 json 的内容如下:

{
    "id": 5,
    "username": "admin",
    "group": 2
}
Run Code Online (Sandbox Code Playgroud)

但是,我想获取枚举字段的名称而不是其值,所以它应该是:

{
    "id": 5,
    "username": "admin",
    "group": "admin"
}
Run Code Online (Sandbox Code Playgroud)

这有可能吗?如果是这样,怎么办?

python enums model pydantic

10
推荐指数
2
解决办法
5518
查看次数

如何用字符串表示反序列化枚举?

我想创建一个类,它有一个枚举作为属性。此枚举应具有字符串表示形式,在将使用枚举属性的类实例转储为 JSON 字符串时,该表示形式显示为人类可读的值。在下面的最小工作示例中,我以三种不同的方式创建了三个枚举。

反序列化后,每个属性都向我们表明它来自枚举,但带有字符串表示形式的枚举除外。它只是一个字符串。

如果不可能实现这样的结构,我想知道为什么。

要求

如果你想测试它,你必须安装jsons并attrs使用

pip install attrs jsons
Run Code Online (Sandbox Code Playgroud)

最小工作示例

在这里您可以看到一个最小的工作示例。

import jsons
import attr

from enum import Enum

# ----------------------------------------------------
# create enumeration with the help of a dictionary

fruits = {
    "PINEAPPLE": "PINEAPPLE",
    "APPLE": "APPLE",
    "ORANGE": "ORANGE",
    "BANANA": "BANANA",
}

Fruit = Enum("FRUITS", fruits)

# ----------------------------------------------------
# create a classical enumeration


class Nut(Enum):

    PEANUT = 1
    HAZELNUT = 2
    CASHEW = 3
    WALNUT = 4


# ----------------------------------------------------
# create enumeration with a …
Run Code Online (Sandbox Code Playgroud)

python enums serialization json-deserialization python-attrs

7
推荐指数
1
解决办法
4571
查看次数