首页 > 解决方案 > goavro 无法使用模式验证 json 数据

问题描述

我是新来的 avro 和努力验证数据。我有这个 avro 模式

{
  "namespace": "com.input",
  "name": "parent",
  "type": "record",
  "fields": [
{
  "name": "field1",
  "type": [
    "null",
    {
      "type": "record",
      "name": "child",
      "fields": [
        {
          "name": "child1",
          "type": "string"
        },
        {
          "name": "child2",
          "type": "string"
        }
      ]
    }
  ]
}
]
}

待验证数据:

{
 "field1": {
 "child1": "1",
 "child2": "abc"
}
}

这是我用来验证使用 goavro 库的代码:

func loadMockData() (stringFormatData string) {
    mockData, err := ioutil.ReadFile("sample.json")
    if err != nil {
        log.Println(err)
    }
    return string(mockData)
}

func loadSchema() (stringFormatData string) {
    mockSchema, err := ioutil.ReadFile("schema.avsc")
    if err != nil {
        log.Println(err)
    }
    return string(mockSchema)
}

avroSchema := loadSchema()
jsonString := loadMockData()

codec, err := goavro.NewCodec(avroSchema)
decoded, _, err := codec.NativeFromTextual([]byte(jsonString))

这给了我以下错误: NativeFromTextual 错误:无法解码文本记录“com.input.parent”:无法解码文本联合:无法解码文本映射:无法确定编解码器:“parentid”

我尝试调试 goavro 库,似乎在 map.go 中 fieldcodec 的 parentid 仍然为零。对于简单的字段,此设置可以正常工作。问题在于嵌套数据无法获取 parentid 的编解码器。

任何帮助深表感谢。

标签: goavro

解决方案


推荐阅读