Golang中国
type Body struct {
    Person1 string
    Age     int
    Salary  float32
}

A=Body{"aaa", 2,12.34}

现在想转成 B[Person1]="aaa"; B[Age]=2, B[Salary]=12.34

如果字段很多,有没有什么好的方法,自动实现?


gogo 于 2014-07-24 14:18 修改
12 回复
goner
#1 goner • 2014-07-24 19:48

主要是大家不明白你到底是什么意思?是下面的这个意思么?

m:=make(map[string]Body)
B := Body{}

for _,v  :=range A {
...
...
m[x] = B
}

?有必要做这个转换么?不明白

jimmykuu
#2 jimmykuu • 2014-07-24 19:56

当然不是楼上的意思,他写的很明白。

jimmykuu
#3 jimmykuu • 2014-07-24 20:44
package main

import (
    "fmt"
    "reflect"
)

type Body struct {
    Person1 string
    Age     int
    Salary  float32
}

func main() {
    a := Body{"aaa", 2, 12.34}
    elem := reflect.ValueOf(&a).Elem()
    type_ := elem.Type()

    map_ := map[string]interface{}{}

    for i := 0; i < type_.NumField(); i++ {
        map_[type_.Field(i).Name] = elem.Field(i).Interface()

    }

    fmt.Println(map_)
}
stackia
#4 stackia • 2014-07-25 13:30

https://github.com/Unknwon/go-fundamental-programming/blob/master/lectures/lecture13.md 补充个链接。看看无闻老师的“反射 reflection”这一课的讲解,还是很好理解的。

goner
#5 goner • 2014-07-26 15:54

这样的要求是否可以 struct 》 json 》 map ?这样简单的命令就可以完成吧?

helloworld
#6 helloworld • 2016-11-19 16:17

弱弱的问下 楼上type还有map 这两个下划线是干啥的

joeonly
#7 joeonly • 2016-11-19 23:17

“这样的要求是否可以 struct 》 json 》 map ?这样简单的命令就可以完成吧?”
正解。

joeonly
#8 joeonly • 2016-11-19 23:17

“这样的要求是否可以 struct 》 json 》 map ?这样简单的命令就可以完成吧?”
正解。

samuier
#9 samuier • 2016-11-22 15:25
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
}
fanyang
#10 fanyang • 2016-11-24 15:41

@helloworld 那个是为了和关键字区分开

golwei
#11 golwei • 2017-05-18 20:34
package main

import (
    "encoding/json"
    "fmt"
    "time"
)

type Persion struct {
    Id   int
    Name string
}

func main() {
    t := time.Now()
    persion := Persion{100, "lee"}
    j, _ := json.Marshal(persion)
    fmt.Println(string(j))
    fmt.Println(time.Now().Sub(t))
}
golwei
#12 golwei • 2017-05-18 21:21
package main

import (
    "encoding/json"
    "fmt"
    "time"
)

type Persion struct {
    Id   int
    Name string
}

func main() {
    //    var m map[string]interface{}
    m := make(map[string]interface{})
    t := time.Now()
    persion := Persion{100, "lee"}
    j, _ := json.Marshal(persion)
    json.Unmarshal(j, &m)
    fmt.Println(m)
    fmt.Println(time.Now().Sub(t))
}
需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。