我是刚接触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库,似乎fieldcodec对于map.go中的parentid仍然为零。对于简单的字段,此设置可以正常工作。问题在于嵌套数据无法获取编解码器的parentid。
非常感谢您的帮助。