为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中从卡夫卡 REST 代理中提取数据

在 Go 中从卡夫卡 REST 代理中提取数据

Go
智慧大石 2022-10-04 16:48:32
我正在使用卡夫卡的 REST 代理实例来生成和使用消息。使用API获取新消息,但我无法将这些消息转换为Go中的结构模型。例如:// Get recordsreq, err := http.NewRequest(http.MethodGet, fmt.Sprintf(FETCH_CONSUMER, URL, GROUP, CONSUMER), nil)if err != nil {    panic(err)}req.Header.Add("Accept", CONTENT_TYPE)respRecords, err := client.Do(req)if err != nil {    panic(err)}defer respRecords.Body.Close()fmt.Printf("Response %s\n", respRecords.Status)fmt.Println(respRecords.Body)recordsBodyResp := bufio.NewScanner(respRecords.Body)for recordsBodyResp.Scan() {    fmt.Printf("<--Body %s\n", recordsBodyResp.Text())    }返回的值采用以下格式:[{"topic":"backward","key":null,"value":{"AdoptionID":"abcd123","IPAddress":"8.8.8.8","Port":"80","Status":"requested"},"partition":0,"offset":7}]由于它是一个对象数组,因此我想将键“value”的值部分提取到结构中。这就是我陷入困境的地方。
查看完整描述

1 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

您可以创建如下结构:


type AutoGenerated []struct {

    Topic     string      `json:"topic"`

    Key       interface{} `json:"key"`

    Value     Value       `json:"value"`

    Partition int         `json:"partition"`

    Offset    int         `json:"offset"`

}

type Value struct {

    AdoptionID string `json:"AdoptionID"`

    IPAddress  string `json:"IPAddress"`

    Port       string `json:"Port"`

    Status     string `json:"Status"`

}


而昂马歇尔在这种结构中。


请参阅此示例代码:


package main


import (

    "fmt"

        "encoding/json"


)


func main() {




type Value struct {

    AdoptionID string `json:"AdoptionID"`

    IPAddress  string `json:"IPAddress"`

    Port       string `json:"Port"`

    Status     string `json:"Status"`

}


type AutoGenerated []struct {

    Topic     string      `json:"topic"`

    Key       interface{} `json:"key"`

    Value     Value       `json:"value"`

    Partition int         `json:"partition"`

    Offset    int         `json:"offset"`

}



    byt := []byte(`[{"topic":"backward","key":null,"value":{"AdoptionID":"abcd123","IPAddress":"8.8.8.8","Port":"80","Status":"requested"},"partition":0,"offset":7}]`)

   var dat AutoGenerated


   if err := json.Unmarshal(byt, &dat); err != nil {

        panic(err)

    }

    fmt.Printf("%#v", dat)


}


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信