Схема Debezium представляет собой строку (json):
{
"type":"record",
"name":"Envelope",
"namespace":"datapipe.inventory.customers",
"fields":[
{
"name":"before",
"type":[
"null",
{
"type":"record",
"name":"Value",
"fields":[
{
"name":"id",
"type":"int"
},
{
"name":"first_name",
"type":"string"
},
{
"name":"last_name",
"type":"string"
},
{
"name":"email",
"type":"string"
}
],
"connect.name":"datapipe.inventory.customers.Value"
}
],
"default":null
},
{
"name":"after",
"type":[
"null",
"Value"
],
"default":null
},
{
"name":"source",
"type":{
"type":"record",
"name":"Source",
"namespace":"io.debezium.connector.mysql",
"fields":[
{
"name":"version",
"type":"string"
},
{
"name":"connector",
"type":"string"
},
{
"name":"name",
"type":"string"
},
{
"name":"ts_ms",
"type":"long"
},
{
"name":"snapshot",
"type":[
{
"type":"string",
"connect.version":1,
"connect.parameters":{
"allowed":"true,last,false"
},
"connect.default":"false",
"connect.name":"io.debezium.data.Enum"
},
"null"
],
"default":"false"
},
{
"name":"db",
"type":"string"
},
{
"name":"table",
"type":[
"null",
"string"
],
"default":null
},
{
"name":"server_id",
"type":"long"
},
{
"name":"gtid",
"type":[
"null",
"string"
],
"default":null
},
{
"name":"file",
"type":"string"
},
{
"name":"pos",
"type":"long"
},
{
"name":"row",
"type":"int"
},
{
"name":"thread",
"type":[
"null",
"long"
],
"default":null
},
{
"name":"query",
"type":[
"null",
"string"
],
"default":null
}
],
"connect.name":"io.debezium.connector.mysql.Source"
}
},
{
"name":"op",
"type":"string"
},
{
"name":"ts_ms",
"type":[
"null",
"long"
],
"default":null
},
{
"name":"transaction",
"type":[
"null",
{
"type":"record",
"name":"ConnectDefault",
"namespace":"io.confluent.connect.avro",
"fields":[
{
"name":"id",
"type":"string"
},
{
"name":"total_order",
"type":"long"
},
{
"name":"data_collection_order",
"type":"long"
}
]
}
],
"default":null
}
],
"connect.name":"datapipe.inventory.customers.Envelope"
}
Я хочу декодировать эту схему в осмысленную структуру данных, чтобы я мог выполнять операции с этими данными.
Преобразование с использованием карты и цикла for происходит медленно и требует большого количества манипуляций, как показано ниже.
for k1, v2 := range m["fields"].([]interface{}) {
fmt.Println(k1)
v3 := v2.(map[string]interface{})
for _, value := range v3 {
if value == "before" {
vtype := v3["type"].([]interface{})
for kk, vtyp := range vtype {
fmt.Printf("kk %v, vtyp %v\n", kk, vtyp)
// for k4, v4 := range vtyp.([]interface{}) {
// fmt.Printf("key4: %v, value4: %v\n", k4, v4)
// }
}
}
}
}
Есть ли тип Debezium на Голанге? Пожалуйста, предложите. Я проверил документацию, но создание типа с таким количеством гнезд очень запутанно.
panic: json: cannot unmarshal object into Go struct field Fields.fields.type of type []interface {}
play.golang.org/p/RCIvR0wGjvZ< /а> - person Alok Kumar Singh   schedule 24.08.2020