package main
import (
"encoding/json"
"fmt"
"github.com/mitchellh/mapstructure"
"reflect"
)
func main() {
mapToStruct()
jsonToStruct()
jsonToMap()
}
func mapToStruct() {
mapData := make(map[string]interface{})
mapData["name"] = "demoName"
mapData["age"] = 18
mapData["like"] = []string{"炒野鸡", "basketball", "eatFish"}
var singleUser MapToStructUser
if err := mapstructure.Decode(mapData, &singleUser); err != nil {
fmt.Println(err)
}
fmt.Printf("map2struct后得到的内容为:%v \n", singleUser)
fmt.Println("name", singleUser.Name)
fmt.Println("nameType", reflect.TypeOf(singleUser.Name))
fmt.Println("age", singleUser.Age)
fmt.Println("ageType", reflect.TypeOf(singleUser.Age))
fmt.Println("like", singleUser.Like)
fmt.Println("likeType", reflect.TypeOf(singleUser.Like))
}
type MapToStructUser struct {
Name string `json:"name"`
Age int `json:"age"`
Like []string `json:"like"`
}
func jsonToStruct() {
jsonStr := `{
"name":"demoName",
"age":18,
"like":["炒野鸡", "basketball", "eatFish"],
"hobby":{
"eat":"meat肉",
"drink":"xifan",
"list":[1, 2, 3]
}
}`
var singleUser JsonToStructUser
err := json.Unmarshal([]byte(jsonStr), &singleUser)
fmt.Println("err2--->", err)
fmt.Printf("map2struct后得到的内容为:%v \n", singleUser)
fmt.Println("name", singleUser.Name)
fmt.Println("nameType", reflect.TypeOf(singleUser.Name))
fmt.Println("age", singleUser.Age)
fmt.Println("ageType", reflect.TypeOf(singleUser.Age))
fmt.Println("like", singleUser.Like)
fmt.Println("likeType", reflect.TypeOf(singleUser.Like))
fmt.Println("hobby", singleUser.Hobby)
fmt.Println("hobby.list", singleUser.Hobby.List)
}
type JsonToStructUser struct {
Name string `json:"name"`
Age int `json:"age"`
Like []string `json:"like"`
Hobby userHobby `json:"hobby"`
}
type userHobby struct {
Eat string `json:"eat"`
Drink string `json:"drink"`
List []int `json:"list"`
}
func jsonToMap() {
jsonStr := `
{
"name":"liangyongxing",
"age":12
}
`
var mapResult map[string]interface{}
err := json.Unmarshal([]byte(jsonStr), &mapResult)
fmt.Println("err1--->", err)
fmt.Println("data", mapResult)
}