【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转结构体时注意结构体的属性必须是开放的,也就是首字符必须大写
相关文章
|
6月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
397 1
|
10月前
|
存储 JSON 安全
Go语言切片,使用技巧与避坑指南
Go语言中的切片(Slice)是动态引用数组的高效数据结构,支持扩容与截取。本文从切片基础、常用操作到高级技巧全面解析,涵盖创建方式、`append`扩容机制、共享陷阱及安全复制等内容。通过代码示例详解切片特性,如预分配优化性能、区分`nil`与空切片、处理多维切片等。掌握这些核心知识点,可编写更高效的Go代码。
387 2
|
6月前
|
JSON Java Go
【GoGin】(2)数据解析和绑定:结构体分析,包括JSON解析、form解析、URL解析,区分绑定的Bind方法
bind或bindXXX函数(后文中我们统一都叫bind函数)的作用就是将,以方便后续业务逻辑的处理。
420 3
|
6月前
|
存储 Java Go
【Golang】(3)条件判断与循环?切片和数组的关系?映射表与Map?三组关系傻傻分不清?本文带你了解基本的复杂类型与执行判断语句
在Go中,条件控制语句总共有三种if、switch、select。循环只有for,不过for可以充当while使用。如果想要了解这些知识点,初学者进入文章中来感受吧!
238 2
|
编译器 Go
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
343 7
|
9月前
|
数据采集 机器学习/深度学习 存储
Go语言实战案例 - 找出切片中的最大值与最小值
本案例通过实现查找整数切片中的最大值与最小值,帮助初学者掌握遍历、比较和错误处理技巧,内容涵盖算法基础、应用场景及完整代码示例,适合初学者提升编程能力。
|
9月前
|
存储 人工智能 安全
深入理解 go sync.Map - 基本原理
本文介绍了 Go 语言中 `map` 在并发使用时的常见问题及其解决方案,重点对比了 `sync.Mutex`、`sync.RWMutex` 和 `sync.Map` 的性能差异及适用场景。文章指出,普通 `map` 不支持并发读写,容易引发错误;而 `sync.Map` 通过原子操作和优化设计,在某些场景下能显著提升性能。同时详细讲解了 `sync.Map` 的基本用法及其适合的应用环境,如读多写少或不同 goroutine 操作不同键的场景。
410 1
|
测试技术 Go API
Go 切片导致 rand.Shuffle 产生重复数据的原因与解决方案
在 Go 语言开发中,使用切片时由于其底层数据共享特性,可能会引发意想不到的 Bug。本文分析了 `rand.Shuffle` 后切片数据重复的问题,指出原因在于切片是引用类型,直接赋值会导致底层数组共享,进而影响原始数据。解决方案是使用 `append` 进行数据拷贝,确保独立副本,避免 `rand.Shuffle` 影响原始数据。总结强调了切片作为引用类型的特性及正确处理方法,确保代码稳定性和正确性。
333 82
|
10月前
|
Go 索引
Go语言中使用切片需要注意什么?
本文详细讲解了Go语言中切片(Slice)的使用方法与注意事项。切片是对数组连续片段的引用,具有灵活的操作方式。文章从定义与初始化、长度与容量、自动扩容、共享底层数组、复制、边界检查、零值到拼接等方面展开,并配以示例代码演示。通过学习,读者可深入了解切片的工作原理及优化技巧,避免常见陷阱,提升编程效率与代码质量。
241 2