使用goavro处理多种类型的解码数据 程序

问题描述

我想做什么?

对于数据库中的每个更改,我都尝试将debezium事件转换为数据库值的CSV,以便加载到Redshift中。

对于110以下的更改,我正在尝试制作一个csv文件:@Headers("Content-type:application/json") @POST("user.php") suspend fun getUsers(@Body body: String): List<User>

val jsonObject = JSONObject()
jsonObject.put("user",user)
jsonObject.put("id","" + id)

val users = network.getUsers(jsonObject.toString())

这是我尝试使用goavro进行的操作。

程序

https://play.golang.org/p/A8Wd0sZPUEQ

110,vck,desc,221.1

有没有更好的方法?对于每种数据类型,我都需要在此处使用switch语句。...

关联的GoAVRO问题:https://github.com/linkedin/goavro/issues/217

解决方法

fmt.Sprintf可用于将接口转换为字符串。 str := fmt.Sprintf("%v",v)

这样做可以将case语句减少为2:

package main

import (
    "fmt"
    "encoding/json"
)

func main() {
    debeziumEvent := `{"before":null,"after":{"datapipe.inventory.products.Value":{"id":110,"name":"vck","description":{"string":"desc"},"weight":{"double":221.10000610351562}}},"source":{"query":null,"snapshot":{"string":"true"},"server_id":0,"gtid":null,"name":"datapipe","thread":null,"ts_ms":0,"file":"mysql-bin.000049","version":"1.2.1.Final","connector":"mysql","pos":154,"table":{"string":"products"},"row":0,"db":"inventory"},"op":"c","ts_ms":{"long":1597649700266},"transaction":null}`
    
    var data map[string]interface{}
        err := json.Unmarshal([]byte(debeziumEvent),&data)
        if err != nil {
            panic(err)
        }
    //fmt.Printf("data=%v\n",data)
    
    after := data["after"].(map[string]interface{})
    csv := []string{}
    
    for _,v := range after {
        for _,v2 := range v.(map[string]interface{}) {
            switch v2.(type) {
            case map[string]interface{}:
                for _,v3 := range v2.(map[string]interface{}) {
                    csv = append(csv,fmt.Sprintf("%v",v3))
                }
            default:
                csv = append(csv,v2))
            }
            
        }
    }
    
    fmt.Println(csv)
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...