【GO】json转map、切片、结构体

简介: 【GO】json转map、切片、结构体

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

结构体转json

map转json

切片转json

在上面三个转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转结构体时注意结构体的属性必须是开放的,也就是首字符必须大写
相关文章
|
25天前
|
Go
go语言中遍历映射(map)
go语言中遍历映射(map)
42 8
|
15天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
26 7
|
25天前
|
Go 索引
Go语言中,遍历数组或切片
在Go语言中,遍历数组或切片
42 6
|
15天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
92 71
|
17天前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
87 62
|
17天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
29 12
|
21天前
|
存储 Go
go语言 遍历映射(map)
go语言 遍历映射(map)
32 2
|
21天前
|
Go 索引
go语言遍历数组和切片
go语言遍历数组和切片
19 2
|
1月前
|
存储 Rust Go
Go nil 空结构体 空接口有什么区别?
本文介绍了Go语言中的`nil`、空结构体和空接口的区别。`nil`是预定义的零值变量,适用于指针、管道等类型;空结构体大小为0,多个空结构体实例指向同一地址;空接口由`_type`和`data`字段组成,仅当两者均为`nil`时,空接口才为`nil`。
Go nil 空结构体 空接口有什么区别?
|
25天前
|
JSON JavaScript 前端开发
Go语言中json序列化的一个小坑,建议多留意一下
在Go语言开发中,JSON因其简洁和广泛的兼容性而常用于数据交换,但其在处理数字类型时存在精度问题。本文探讨了JSON序列化的一些局限性,并介绍了两种替代方案:Go特有的gob二进制协议,以及msgpack,两者都能有效解决类型保持和性能优化的问题。
49 7