无法在Golang中解析AVRO模式

时间:2019-02-14 15:57:47

标签: json go schema avro

我无法解析我的AVRO json模式。 我尝试使用以下库中的 avro.ParseSchema 函数:https://github.com/go-avro/avro。 但是,我收到以下错误消息:

  

未知类型名称:数组

我已经尝试解决了很长时间,但是我似乎无法做到这一点。 我实现了以下结构:

import (
   "bytes"
   "log"

   avro "gopkg.in/avro.v0"
)

type Matrix struct {
    UID  int         `avro:"uid"`
    Data [][]float64 `avro:"data"`
}

type MatrixContainer struct {
    MatricesArray []*Matrix `avro:"matrices_array"`
}

//Somewhere in here it goes wrong
 schema, err := avro.ParseSchema(`{
        "type": "record",
        "name": "MatrixContainer",
        "fields": [
            {
                "name": "matrices_array", 
                "type": "array", 
                "items": {
                    "type": "record",
                    "name": "Matrix",
                    "fields": [
                        {"name": "uid","type":"int"},
                        {"name": "data","type":"array","items":
                            {"type":"array","items":"double"}
                        }
                    ]
                }
            }

        ]
    }`)

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

在记录字段中,您不能说“ type”:“ array”;您需要使“类型”成为有效的Avro模式,而不是有效的Avro类型。

尝试以下操作:

{
    "type": "record",
    "name": "MatrixContainer",
    "fields": [
        {
            "name": "matrices_array",
            "type": {
                "type": "array",
                "items": {
                    "type": "record",
                    "name": "Matrix",
                    "fields": [
                        {
                            "name": "uid",
                            "type": "int"
                        },
                        {
                            "name": "data",
                            "type": {
                                "type": "array",
                                "items": {
                                    "type": "array",
                                    "items": "double"
                                }
                            }
                        }
                    ]
                }
            }
        }
    ]
}

ref:https://avro.apache.org/docs/1.8.1/spec.html#schema_record