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 基于卷积神经网络的声纹识别
    • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
    • ¥100 为什么这个恒流源电路不能恒流?
    • ¥15 有偿求跨组件数据流路径图
    • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
    • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
    • ¥15 CSAPPattacklab
    • ¥15 一直显示正在等待HID—ISP
    • ¥15 Python turtle 画图
    • ¥15 stm32开发clion时遇到的编译问题