加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数组 – golang在多播ip上发送json

发布时间:2020-12-16 09:24:43 所属栏目:大数据 来源:网络整理
导读:我正在写一个Go来发送多播udp上的json数据: func send(a string,messages chan interface{}) { addr,err := net.ResolveUDPAddr("udp",a) CheckError(err) c,err := net.DialUDP("udp",nil,addr) CheckError(err) for { msg := -messages myjson,err := jso
我正在写一个Go来发送多播udp上的json数据:

func send(a string,messages chan interface{}) {
    addr,err := net.ResolveUDPAddr("udp",a)
    CheckError(err)
    c,err := net.DialUDP("udp",nil,addr)
    CheckError(err)
    for {
        msg := <-messages
        myjson,err := json.Marshal(msg)
        if err != nil {
            fmt.Println("Error encoding JSON")
        return
        }
        //Write to bytes to multicast UDP
        c.Write([]byte(myjson))

        time.Sleep(2 * time.Second)
    }
}

所以我的json被转换为一个byte数组,以使其工作.这是我的“接收器”功能:

func serveMulticastUDP(a string,messages chan interface{}) {

    addr,a)
    CheckError(err)
    l,err := net.ListenMulticastUDP("udp",addr)
    l.SetReadBuffer(maxDatagramSize)
    for {
        b := make([]byte,maxDatagramSize)
        n,src,err := l.ReadFromUDP(b)
        if err != nil {
            log.Fatal("ReadFromUDP failed:",err)
        }
        s := string(b[:n])//here is my problem,I want s to be map[string]interface before sending in my channel
        messages<-s
        log.Println(s)
        log.Println(src)
        log.Println(n)
        //h(src,n,b)
    }
}

如何将一个字节数组转换为map [string] interface(json)?

解决方法

在您的代码中,您使用 json.Marshal()将值转换为JSON文本([] byte).

另一个方向([] byte – > value)可以使用json.Unmarshal()完成.json.Unmarshal()需要一个[]字节,因此您甚至不必将其转换为字符串.

看这个例子:

data := []byte(`{"key1":"value1","key2":123}`)

var m map[string]interface{}
if err := json.Unmarshal(data,&m); err != nil {
    panic(err)
}

fmt.Printf("%+v",m)

输出(在Go Playground上试试):

map[key1:value1 key2:123]

笔记:

编组的结果(json.Marshal())是[]字节类型的值,因此您不需要在此处进行显式转换:

c.Write([]byte(myjson))

你可以简单地写:

c.Write(myjson)

同样在解组时,请确保将b [:n]传递给json.Unmarshal(),因为切片的其余部分包含0(您的第二个错误建议),但它们不是json文本的一部分!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读