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

fastavro校验嵌套Avro Schema时出现ValidationError求助

问题:fastavro校验嵌套Avro Schema时抛出ValidationError

报错信息

File "fastavro\_validation.pyx", line 301, in fastavro._validation.validate
  File "fastavro\_validation.pyx", line 311, in fastavro._validation.validate
  File "fastavro\_validation.pyx", line 296, in fastavro._validation._validate
fastavro._validate_common.ValidationError: [
  " is <[{'id': '123 Drive Street', 'address': [{'address_line1': 'no'}]}]> of type <class 'list'> expected {'type': 'record', 'name': 'example.avro.Person', 'fields': [{'name': 'id', 'type': 'string'}, {'name': 'address', 'type': {'type': 'array', 'items': {'type': 'record', 'name': 'example.avro.Address', 'fields': [{'name': 'address_line1', 'type': 'string'}]}}}], '__fastavro_parsed': True, '__named_schemas': {'example.avro.Person': {'type': 'record', 'name': 'example.avro.Person', 'fields': [{'name': 'id', 'type': 'string'}, {'name': 'address', 'type': {'type': 'array', 'items': {'type': 'record', 'name': 'example.avro.Address', 'fields': [{'name': 'address_line1', 'type': 'string'}]}}}]}, 'example.avro.Address': {'type': 'record', 'name': 'example.avro.Address', 'fields': [{'name': 'address_line1', 'type': 'string'}]}}}"
]

相关代码

import fastavro
from fastavro import parse_schema

household_schema = {
  "namespace": "example.avro",
  "type": "record",
  "name": "Person",
  "fields": [
    {
      "name": "id",
      "type": "string"
    },

    {
      "name": "address",
      "type": {
        "type": "array",
        "items": {
          "type": "record",
          "name": "Address",
          "fields": [
            {
              "name": "address_line1",
              "type": "string"
            }

          ]
        }
      }
    }
  ]
}

records = [
    {
        "id": "123 Drive Street",
        "address": [
            {
                "address_line1": "no"
            }
        ]
    }
]


parsed_schema = parse_schema(household_schema)
fastavro.validate(records, parsed_schema)

生成的示例数据

{
  "id": "vrfofjyifppdyucdtx",
  "address": [
    {
      "address_line1": "no"
    }
  ]
}

解决方案

问题核心是数据类型不匹配:你传入的records是列表,但fastavro.validate默认校验单个符合Person record类型的数据,而非列表。有两种解决方式:

方式1:用validate_many校验列表数据

将最后一行校验代码替换为:

fastavro.validate_many(records, parsed_schema)

方式2:校验单个记录

如果仅需校验单条数据,直接传入列表中的单个元素:

fastavro.validate(records[0], parsed_schema)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:48:24