【golang】结构体与json相互转换,map与json相互转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【golang】结构体与json相互转换,map与json相互转换相关的知识,希望对你有一定的参考价值。

参考技术A 运行结果:

运行结果:

运行结果:

运行结果:

Golang 结构体和[]byte相互转换

Golang数据结构与[]byte的相互转换,需要了解两个数据结构具体的底层实现,然后构造相同的数据结构进行转换即可。

package main

import (
     "fmt"
     "unsafe"
)
type Data struct {
    a,b int32
    c  map[string]interface{}
}

type SliceMock struct {
    addr uintptr
    len  int
    cap  int
}

func main() {
    d := Data{
        a: 1, 
        b: 2, 
        c: map[string]interface{}{
            "name": "thomas", 
            "age": 89,
        },
    }
        /*
         因[]byte底层数据结构与slicemock一致,需要构造一个完全一样
         的数据结构进行转换
        */
    len := unsafe.Sizeof(d)
    sliceMockTest := SliceMock{
        addr: uintptr(unsafe.Pointer(&d)),
        len : int(len),
        cap : int(len),
    }
    structToByte := *(*[]byte)(unsafe.Pointer(&sliceMockTest))
    fmt.Printf("structToByte: %T, %v
", structToByte, structToByte)
    
       /*
         []byte转换成数据结构,只需取出addr地址即可,然后转换成对应的
         数据结构类型即可
       */
    byteToStruct := *(*Data)(unsafe.Pointer(&structToByte[0]))
    fmt.Println("byteToStuct: ", byteToStruct)
    return
}

输出结果如下:

structToByte: []uint8, [1 0 0 0 2 0 0 0 56 174 5 0 192 0 0 0]
byteToStruct: {1 2 map[age:89 name:thomas]}

 

以上是关于【golang】结构体与json相互转换,map与json相互转换的主要内容,如果未能解决你的问题,请参考以下文章

Golang basic_leaming结构体和 Json 相互转换序列化反序列化

golang struct, map, json 之间的相互转换

关于结构体与字符串相互转换验证

EasyRTC视频会议项目开发中Golang json 数据与 map 的相互转换说明

Go 结构体与 JSON 之间的转换

Go -- 中结构体与字节数组能相互转化