【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指针
相关文章
|
2月前
|
Go
go语言中遍历映射(map)
go语言中遍历映射(map)
74 8
|
3月前
|
JSON 算法 vr&ar
目标检测笔记(五):查看通过COCOEvaluator生成的coco_instances_results.json文件的详细检测信息,包含AP、AR、MR和DR等
本文介绍了如何使用COCO评估器通过Detectron2库对目标检测模型进行性能评估,生成coco_instances_results.json文件,并利用pycocotools解析该文件以计算AP、AR、MR和DR等关键指标。
187 1
目标检测笔记(五):查看通过COCOEvaluator生成的coco_instances_results.json文件的详细检测信息,包含AP、AR、MR和DR等
|
1月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
106 71
|
1月前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
44 12
|
2月前
|
存储 Rust Go
Go nil 空结构体 空接口有什么区别?
本文介绍了Go语言中的`nil`、空结构体和空接口的区别。`nil`是预定义的零值变量,适用于指针、管道等类型;空结构体大小为0,多个空结构体实例指向同一地址;空接口由`_type`和`data`字段组成,仅当两者均为`nil`时,空接口才为`nil`。
Go nil 空结构体 空接口有什么区别?
|
2月前
|
存储 Go
go语言 遍历映射(map)
go语言 遍历映射(map)
44 2
|
2月前
|
JSON JavaScript 前端开发
Go语言中json序列化的一个小坑,建议多留意一下
在Go语言开发中,JSON因其简洁和广泛的兼容性而常用于数据交换,但其在处理数字类型时存在精度问题。本文探讨了JSON序列化的一些局限性,并介绍了两种替代方案:Go特有的gob二进制协议,以及msgpack,两者都能有效解决类型保持和性能优化的问题。
63 7
|
2月前
|
编译器 Go
探索 Go 语言中的内存对齐:为什么结构体大小会有所不同?
在 Go 语言中,内存对齐是优化内存访问速度的重要概念。通过调整数据在内存中的位置,编译器确保不同类型的数据能够高效访问。本文通过示例代码展示了两个结构体 `A` 和 `B`,尽管字段相同但排列不同,导致内存占用分别为 40 字节和 48 字节。通过分析内存布局,解释了内存对齐的原因,并提供了优化结构体字段顺序的方法,以减少内存填充,提高性能。
47 3
|
2月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
59 4
|
2月前
|
Unix Linux Go
go进阶编程:Golang中的文件与文件夹操作指南
本文详细介绍了Golang中文件与文件夹的基本操作,包括读取、写入、创建、删除和遍历等。通过示例代码展示了如何使用`os`和`io/ioutil`包进行文件操作,并强调了错误处理、权限控制和路径问题的重要性。适合初学者和有经验的开发者参考。