如何在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
相关产品推荐
相关产品推荐

