duanke1286 2018-11-02 17:39
浏览 181

使用反射包递归遍历map [string] interface {}

i just trying learn to use reflection, i wanna go througe each field in the map[string]interface{} this why i using json.Unmarshal to interface{}.

func i2s(data interface{}, out interface{}) error {
    fmt.Println(reflect.TypeOf(data).Kind())
    switch reflect.TypeOf(data).Kind() {
    case reflect.Map, reflect.Array, reflect.Ptr, reflect.Slice:
        i2s(reflect.TypeOf(data).Elem(), out)

    case reflect.Struct:
        for i := 0; i < reflect.ValueOf(data).NumField(); i++ {
            f := reflect.TypeOf(data).Field(i)
            fmt.Println(f.Name, f.Type.Name())

            if f.Tag != "" {
                fmt.Println(f.Tag)
            }
        }
    }
    return nil
}

type Simple struct {
    ID       int
    Username string
    Active   bool
}

func main() {
    test := &Simple{
        ID:       42,
        Username: "dcandu",
        Active:   true,
    }

    jsonRaw, _ := json.Marshal(test)

    var tmpData interface{}
    json.Unmarshal(jsonRaw, &tmpData)

    result := new(Simple)
    i2s(tmpData, result)
}

When i run this code i get the infinite loop. Please tell me where i'm doing wrong.

Thank you.

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
    • ¥15 CSAPPattacklab
    • ¥15 一直显示正在等待HID—ISP
    • ¥15 Python turtle 画图
    • ¥15 关于大棚监测的pcb板设计
    • ¥15 stm32开发clion时遇到的编译问题
    • ¥15 lna设计 源简并电感型共源放大器
    • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
    • ¥15 Vue3地图和异步函数使用
    • ¥15 C++ yoloV5改写遇到的问题