golang结构体转map

Posted

tags:

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

package main import ( "encoding/json" "fmt" "reflect" "time" ) type Body struct { Person1 string Age int Salary float32 } func Struct2Map(obj interface{}) (data map[string]interface{}, err error) { data = make(map[string]interface{}) objT := reflect.TypeOf(obj) objV := reflect.ValueOf(obj) for i := 0; i < objT.NumField(); i++ { data[objT.Field(i).Name] = objV.Field(i).Interface() } err = nil return } func Test1() { t := time.Now() a := Body{"aaa", 2, 12.34} elem := reflect.ValueOf(&a).Elem() type_ := elem.Type() m := map[string]interface{}{} for i := 0; i < type_.NumField(); i++ { m[type_.Field(i).Name] = elem.Field(i).Interface() } fmt.Println(time.Now().Sub(t), m) } func Test2() { t := time.Now() persion := Body{"aaa", 2, 12.34} j, _ := json.Marshal(persion) fmt.Println(time.Now().Sub(t), string(j)) } func Test3() { m := make(map[string]interface{}) t := time.Now() persion := Body{"aaa", 2, 12.34} j, _ := json.Marshal(persion) json.Unmarshal(j, &m) fmt.Println(time.Now().Sub(t), m) } func Test4() { t := time.Now() persion := Body{"aaa", 2, 12.34} ret, _ := Struct2Map(persion) fmt.Println(time.Now().Sub(t), ret) } func main() { Test1() Test2() Test3() Test4() }
package main

import (
    "fmt"
    "reflect"
    "time"
)

type User struct {
    Id        int64
    Username  string
    Password  string
    Logintime time.Time
}

func Struct2Map(obj interface{}) map[string]interface{} {
    t := reflect.TypeOf(obj)
    v := reflect.ValueOf(obj)

    var data = make(map[string]interface{})
    for i := 0; i < t.NumField(); i++ {
        data[t.Field(i).Name] = v.Field(i).Interface()
    }
    return data
}

func main() {
    user := User{5, "zhangsan", "pwd", time.Now()}
    data := Struct2Map(user)
    fmt.Println(data)
}

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

C++ 结构体转json

C++ 结构体转json

C++ 结构体转json

C++ 结构体转json

代码片段 - Golang 实现集合操作

golang的xorm如何将[]map[string][]byte 格式的数据序列化成json输出