【GO】json文件解码为map和结构体

简介: 【GO】json文件解码为map和结构体

咔咔博客之json文件解码为map和结构体

【GO】50 编码map为json文件说了map转json文件

案例:json转为map

image.png

package main
import (
  "encoding/json"
  "fmt"
  "os"
)
/**
json解码为go
*/
func main() {
  file, e := os.OpenFile("d:/kaka.json", os.O_RDONLY, 0666)
  if e != nil {
    fmt.Println("文件打开失败")
  } else {
    fmt.Println("json文件打开成功")
  }
  // 文件挂起执行完关闭文件
  defer file.Close()
  // 创建解码器
  decoder := json.NewDecoder(file)
  mMap := make(map[string]interface{})
  e = decoder.Decode(&mMap)
  fmt.Println(e)
  if e != nil {
    fmt.Println("文件解码失败")
  } else {
    // 文件解码成功 map[like:[撸代码 你猜] name:咔咔 咔咔博客地址:blog.fangkang.top 咔咔手赚网地址:fangkang.top]
    fmt.Println("文件解码成功", mMap)
  }
}

json转为结构体

image.png

package main
import (
  "encoding/json"
  "fmt"
  "os"
)
type persons struct {
  Name string
  Like []string
}
/**
json解码为结构体
*/
func main() {
  file, e := os.OpenFile("d:/kaka.json", os.O_RDONLY, 0666)
  if e != nil {
    fmt.Println("文件打开失败")
  } else {
    fmt.Println("json文件打开成功")
  }
  // 文件挂起执行完关闭文件
  defer file.Close()
  // 创建解码器
  decoder := json.NewDecoder(file)
  // 创建的本来就是一个指针
  perPtr := new(persons)
  err := decoder.Decode(perPtr)
  if err != nil {
    fmt.Println("文件解码失败")
  } else {
    //文件解码成功 &{咔咔 [撸代码 你猜]}
    fmt.Println("文件解码成功", perPtr)
  }
}

案例注意点

  • json转结构体时,结构体的属性需要大写。new一个结构体出来就是指针
  • 接送转map时需要传入map指针
相关文章
|
17天前
|
存储 安全 测试技术
【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用
【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用
29 3
|
9天前
|
Go
go语言map、实现set
go语言map、实现set
14 0
|
3天前
|
JSON 前端开发 JavaScript
Go怎么解析不定JSON数据?
在Go中处理不确定结构的JSON数据,可以使用`map[string]interface{}`来解析,它能适应各种JSON键值对,但需要类型检查。另一种方法是使用`json.RawMessage`保存原始JSON,之后按需解析。此外,`json.Number`用于处理任意精度的数字。当JSON字段类型未知时,可以先解码到`interface{}`并做类型断言。第三方库如gjson和jsonparser提供更灵活的解析选项。
|
13天前
|
缓存 安全 算法
Go 中使用 map 实现高效的数据缓存
Go 中使用 map 实现高效的数据缓存
|
13天前
|
存储 缓存 安全
Go 中使用 map 实现高效的数据查找和更新
Go 中使用 map 实现高效的数据查找和更新
|
9天前
|
Go
go结构体的定义
go结构体的定义
11 1
|
9天前
|
JSON Go 数据格式
go之json使用
go之json使用
9 0
|
9天前
|
Go
go切片和map比较
go切片和map比较
11 0
|
9天前
|
Go
go反射获取变量类型、值、结构体成员、结构体方法
go反射获取变量类型、值、结构体成员、结构体方法
13 0
|
13天前
|
Shell Go
怎么让 Go 中如何让结构体不可比较?
在 Go 语言中,结构体默认是可以比较的,只要它们的所有字段都是可比较的。如果结构体包含不可比较的字段(如 `map`),则该结构体不能直接使用 `==` 进行比较,会引发编译错误。可以通过 `reflect.DeepEqual()` 函数对包含不可比较字段的结构体进行深度比较。为了禁止结构体的相等性比较,可以使用 `_ [0]func()` 作为匿名字段,这是一种不占用额外内存且具有明确语义的优雅做法。Go 语言标准库中也有类似的应用。