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

Python Marshmallow对象列表验证Schema问题排查

你的Marshmallow Schema代码存在以下3个关键错误:

1. 非法的JSON字符串格式

你定义的data字符串不符合JSON规范:JSON要求所有键必须用双引号包裹,但value未使用双引号,导致该字符串无法被json.loads()正确解析。

修复方法:给value加上双引号,让整个字符串成为合法JSON:

data = '{"value": [{"path" : "libs/shared/components/shortcuts/src/lib/shortcuts.component.ts", "content_match_count" : 3},{"path" : "libs/shared/components/shortcuts/src/lib/shortcuts.module.ts", "content_match_count" : 5}]}'

2. 错误使用many=True参数

many=True用于解析顶层为数组的数据(比如[{}, {}, ...]),但你的数据结构是单个对象,其中value字段才是数组。加上many=True会让Marshmallow把整个输入当成对象数组解析,完全不匹配你的数据结构。

修复方法:去掉many=True:

schema_data = MyResponseSchema().load(parsed_data)

3. 直接传入JSON字符串给load()方法

Marshmallow的load()方法接收的是Python字典,而非JSON字符串。直接传字符串会导致Marshmallow尝试遍历字符串字符,引发类型错误。

修复方法:先用json.loads()把JSON字符串解析成Python字典:

parsed_data = json.loads(data)
schema_data = MyResponseSchema().load(parsed_data)

完整修复后的代码:

from marshmallow import Schema, fields, post_load
import json

class MyResponseDataSchema(Schema):
    path = fields.Str(required=False)
    content_match_count = fields.Int(required=False)

class MyResponseSchema(Schema):
    value = fields.List(
        fields.Nested(MyResponseDataSchema),
        required=False,
    )

# 修正后的合法JSON字符串
data = '{"value": [{"path" : "libs/shared/components/shortcuts/src/lib/shortcuts.component.ts", "content_match_count" : 3},{"path" : "libs/shared/components/shortcuts/src/lib/shortcuts.module.ts", "content_match_count" : 5}]}'
# 解析JSON为字典
parsed_data = json.loads(data)
# 去掉many=True,正确加载数据
schema_data = MyResponseSchema().load(parsed_data)
print(schema_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:25:37