🌰如下:
package main
import (
"encoding/json"
"fmt"
"github.com/mitchellh/mapstructure"
"reflect"
)
/**
结构体,map,json互相转换
*/
type Person struct {
Name string
Age int
}
func main(){
JsonToStruct()
StructToJson()
JsonToMap()
MapToJson()
MapToStruct()
TestStructToMap()
}
//json -> struct
func JsonToStruct(){
jstr:=`{"name":"james","age":12}`
var person Person
json.Unmarshal([]byte(jstr),&person)
//如果是结构体输出小些则会错误
fmt.Printf("%v\n",person)
}
//struct -> json
func StructToJson(){
p:=Person{
Name:"mone",
Age:12,
}
jsonbytes,err:=json.Marshal(p)
if err!= nil {
fmt.Print(err)
}
fmt.Printf("%s\n",(jsonbytes))
}
//json -> map
func JsonToMap(){
jsonstr := `{"Name":"james","Age":12}`
var mapResult map[string]interface{}
if err := json.Unmarshal([]byte(jsonstr),&mapResult);err!=nil{
fmt.Println(err)
}
fmt.Printf("%v\n",mapResult)
}
//map -> json
func MapToJson(){
mapInstance:=make(map[string]interface{})
mapInstance["Name"] = "james"
mapInstance["Age"] = 23
jstr,err:=json.Marshal(mapInstance)
if err!= nil {
fmt.Println(err)
}
fmt.Printf("%s\n",jstr)
}
//map -> struct
func MapToStruct(){
mapInstance:=make(map[string]interface{})
mapInstance["Name"] = "james"
mapInstance["Age"] = 28
var person Person
if err := mapstructure.Decode(mapInstance,&person);err!=nil{
fmt.Println(err)
}
fmt.Printf("%v\n",person)
}
//struct -> map
type User struct {
Id int `json:"id"`
Username string `json:"username"`
Password string `json:"password"`
}
func StructToMap(obj interface{}) map[string]interface{} {
t := reflect.TypeOf(obj)
v := reflect.ValueOf(obj)
var data = make(map[string]interface{})
for i := 0;i<t.NumField();i++ {
data[t.Field(i).Name] = v.Field(i).Interface()
}
return data
}
func TestStructToMap(){
user:=User{
5,
"james",
"123",
}
data := StructToMap(user)
fmt.Printf("%v",data)
}