咔咔博客之json转map、切片、结构体

在上面三个转json使用的是json_Marshal.也就是序列化的过程,那么反序列的函数json.Unmarshal()

json转map


image.png

/**
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)
    }
}

屏幕快照 2022-05-18 下午11.13.04.png

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)
    }
}

屏幕快照 2022-05-18 下午11.13.21.png

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转结构体时注意结构体的属性必须是开放的,也就是首字符必须大写