相关疑难解决方法(0)

将Python Enum编码为JSON

我有一个字典,其中一些键是Enum实例(enum.Enum的子类).我正在尝试根据文档使用自定义JSON编码器类将字典编码为JSON字符串.我想要的只是让输出的JSON中的键是Enum名称的字符串.例如,{ TestEnum.one : somevalue }将编码为{ "one" : somevalue }.

我写了一个简单的测试用例,如下所示,我在一个干净的virtualenv中测试过:

import json

from enum import Enum

class TestEnum(Enum):
    one = "first"
    two = "second"
    three = "third"

class TestEncoder(json.JSONEncoder):
    """ Custom encoder class """

    def default(self, obj):

        print("Default method called!")

        if isinstance(obj, TestEnum):
            print("Seen TestEnum!")
            return obj.name

        return json.JSONEncoder.default(self, obj)

def encode_enum(obj):
    """ Custom encoder method """

    if isinstance(obj, TestEnum):
        return obj.name
    else:
        raise TypeError("Don't know how to decode this")

if __name__ == "__main__": …
Run Code Online (Sandbox Code Playgroud)

python enums json python-3.6

5
推荐指数
2
解决办法
1771
查看次数

将 pathlib.Path 数据发送到 FastAPI:PosixPath 不可 JSON 序列化

我已经使用 FastAPI 构建了一个 API,并尝试从客户端向它发送数据。

API 和客户端都使用类似的 Pydantic 模型来处理我要提交的数据。这包括一个包含文件路径的字段,我将其存储在 pathlib.path 类型的字段中。

然而,FastAPI 不接受提交,因为它显然无法处理路径对象:

TypeError: Object of type PosixPath is not JSON serializable

这是显示问题的最小测试文件:

import pathlib
from pydantic import BaseModel
from fastapi import FastAPI
from fastapi.testclient import TestClient


api = FastAPI()
client = TestClient(api)

class Submission(BaseModel):
    file_path: pathlib.Path

@api.post("/", response_model=Submission)
async def add_submission(subm: Submission):
    print(subm)
    # add submission to database
    return subm


def test_add_submission():
    data = {"file_path": "/my/path/to/file.csv"}
    print("original data:", data)

    # create a Submission object, which casts filePath to pathlib.Path:
    submission …
Run Code Online (Sandbox Code Playgroud)

python json pydantic fastapi

5
推荐指数
1
解决办法
7816
查看次数

标签 统计

json ×2

python ×2

enums ×1

fastapi ×1

pydantic ×1

python-3.6 ×1