我需要将关键字为json标记名的map[string]interface{}转换为struct
type MyStruct struct {
    Id           string `json:"id"`
    Name         string `json:"name"`
    UserId       string `json:"user_id"`
    CreatedAt    int64  `json:"created_at"`
}map[string]interface{}具有密钥id、name、user_id、created_at。我需要将其转换为struct。
发布于 2018-11-14 05:52:28
您可以使用https://github.com/mitchellh/mapstructure来实现这一点。默认情况下,它查找标记mapstructure;因此,如果希望使用TagName标记,将json指定为json非常重要。
package main
import (
    "fmt"
    "github.com/mitchellh/mapstructure"
)
type MyStruct struct {
    Id        string `json:"id"`
    Name      string `json:"name"`
    UserId    string `json:"user_id"`
    CreatedAt int64  `json:"created_at"`
}
func main() {
    input := map[string]interface{} {
        "id": "1",
        "name": "Hello",
        "user_id": "123",
        "created_at": 123,
    }
    var output MyStruct
    cfg := &mapstructure.DecoderConfig{
        Metadata: nil,
        Result:   &output,
        TagName:  "json",
    }
    decoder, _ := mapstructure.NewDecoder(cfg)
    decoder.Decode(input)
    fmt.Printf("%#v\n", output)
    // main.MyStruct{Id:"1", Name:"Hello", UserId:"123", CreatedAt:123}
}https://stackoverflow.com/questions/48994008
复制相似问题