goavro无法使用架构验证json数据

时间:2018-08-18 04:08:34

标签: go avro

我是刚接触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。

非常感谢您的帮助。

0 个答案:

没有答案