咔咔博客之json转map、切片、结构体
在上面三个转json使用的是json_Marshal.也就是序列化的过程,那么反序列的函数json.Unmarshal()
json转map
/** json转map */ func main3() { jsonStr := `{"name":"咔咔","age":20,"address":["fangkang.top","blog.fangkang.top"]}` mMap := make(map[string]interface{}) err := json.Unmarshal([]byte(jsonStr), &mMap) if err != nil { fmt.Println("反序列化失败") } else { // map[address:[fangkang.top blog.fangkang.top] age:20 name:咔咔] fmt.Println(mMap) } }
func main() { jsonStr := `[ {"name":"咔咔","age":20,"address":["fangkang.top","blog.fangkang.top"]}, {"name":"咔咔","age":20,"address":["fangkang.top","blog.fangkang.top"]}, {"name":"咔咔","age":20,"address":["fangkang.top","blog.fangkang.top"]} ]` mSlice := make([]map[string]interface{}, 0) err := json.Unmarshal([]byte(jsonStr), &mSlice) fmt.Println(err) if err != nil { fmt.Println("反序列化失败") } else { // [map[address:[fangkang.top blog.fangkang.top] age:20 name:咔咔] map[address:[fangkang.top blog.fangkang.top] age:20 name:咔咔] map[address:[fangkang.top blog.fangkang.top] age:20 name:咔咔]] fmt.Println(mSlice) } }
type Persons struct { Name string Age int Address []string } /** json转结构体 */ func main() { jsonStr := `{"name":"咔咔","age":20,"address":["fangkang.top","blog.fangkang.top"]}` k := Persons{} err := json.Unmarshal([]byte(jsonStr), &k) if err != nil { fmt.Println("反序列化失败") } else { fmt.Println(k) } }
注意点
- 在json转任何类型时都是传的指针
- 使用json_Unmarshil来转json
- json转切片注意每个值后边的逗号
- json转结构体时注意结构体的属性必须是开放的,也就是首字符必须大写