如何创建通用函数,将json字符串转换为golang中的结构?

时间:2019-06-04 15:11:01

标签: json function go interface

首先,我具有以下结构:

type User struct {
    Username string
    Password string
    FullName string
    Mail string
}

我尝试创建以下功能:

func FromJson(emptyJsonAble interface{},jsonString string) interface{} {
    err := json.Unmarshal([]byte(jsonString), &emptyJsonAble)
    if err != nil {
        panic(err)
    }
    return emptyJsonAble
}

我已经按照以下方式调用了该函数:

user := FromJson(User{}, str)

但是该函数返回以下映射而不是User struct:

地图[全名:a邮件:a密码:b用户名:a]

如何返回结构本身(无需每次都转换返回的对象)

换句话说,给出时如何使函数将EmptyJsonAble视为用户类型。 我曾尝试使用reflect.Type,但被卡住了

1 个答案:

答案 0 :(得分:1)

在传递User结构时,实际上是在传递值的副本,在这种情况下,您想要做的就是传递对该类型的指针引用。然后,因为您已经有了一个指针,所以不需要在函数内部传递引用:

user := FromJson(&User{}, str)

err := json.Unmarshal([]byte(jsonString), emptyJsonAble)

https://play.golang.org/p/uXMcFCl138y

更新:

同样,因为您现在正在通过引用传递,所以您无需返回未编组数据结构的副本:

https://play.golang.org/p/GJKqVJLbRCZ

在两种情况下,我们都可以看到结果相同,因此无需返回数据