You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在FastAPI Strawberry突变中传入字典类型输入?

Strawberry突变传入字典数据的替代方案

你不想用转义引号传JSON字符串的话,有这几个可行方法:

1. 自定义字典标量类型

自己实现一个支持字典的标量,就能直接接收原生字典格式的数据,无需转义。示例代码:

from strawberry.scalars import Scalar
from typing import Any

@Scalar("DictScalar")
class DictScalar:
    @staticmethod
    def serialize(value: dict) -> dict:
        return value

    @staticmethod
    def parse_value(value: dict) -> dict:
        return value

在突变中使用这个标量:

import strawberry

@strawberry.type
class Mutation:
    @strawberry.mutation
    def update_countries(self, data: DictScalar) -> str:
        # 直接处理data字典
        return "操作成功"

2. 定义固定结构的输入类型

如果你的字典结构是固定的,直接定义对应的输入类型更规范,调用时也不用转义。示例:

import strawberry

@strawberry.input
class CountryInput:
    nepal: str
    italy: str
    england: str

@strawberry.type
class Mutation:
    @strawberry.mutation
    def update_countries(self, data: CountryInput) -> str:
        # 通过data.nepal、data.italy访问对应值
        return "操作成功"

GraphQL调用示例:

mutation {
  updateCountries(data: { nepal: "Kathmandu", italy: "Rome", england: "London" }) {
    value
  }
}

3. 直接传JSON对象(而非字符串)

如果你用的是JSON类型,其实不用手动写转义引号的字符串——在GraphQL客户端调用时,直接传入结构化的对象即可,客户端会自动处理成正确的JSON格式传给服务器。比如:

mutation {
  updateCountries(data: { "Nepal": "Kathmandu", "Italy": "Rome", "England": "London" }) {
    value
  }
}

后端用strawberry.JSON类型接收就能直接拿到字典,无需处理转义。

内容的提问来源于stack exchange,提问作者siva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:48:23