前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >GO系列(5)-struct的json

GO系列(5)-struct的json

原创
作者头像
爽朗地狮子
修改于 2022-10-20 03:38:07
修改于 2022-10-20 03:38:07
3930
举报
文章被收录于专栏:云原生系列云原生系列

一. struct转json

表示我要把相关的字段编码进结构体中

Struct tag “-” 表示跳过指定的 filed:

例1

代码语言:txt
AI代码解释
复制
package main

import (
   "encoding/json"
   "fmt"
)

// Message TODO
type Message struct {
   Name string `json:"some_field"`
   Body string `json:"-"`
   Time int64
}

func main() {
   m := Message{"Alice", "Hello", 234234234}
   b, err := json.Marshal(m)
   if err != nil {
      fmt.Println("生成json字符串错误")
   }
   var a string = string(b)
   fmt.Printf("%s", a)
}

输出

代码语言:txt
AI代码解释
复制
{"some_field":"Alice","Time":234234234}

例2

代码语言:txt
AI代码解释
复制
package main

import (
   "encoding/json"
   "fmt"
)

// Stu TODO
type Stu struct {
   Name  string `json:"name"`
   Age   int
   HIgh  bool
   sex   string
   Class *Class `json:"class"`
}

// Class TODO
type Class struct {
   Name  string
   Grade int
}

func main() {
   // 实例化一个数据结构,用于生成json字符串
   stu := Stu{
      Name: "张三",
      Age:  18,
      HIgh: true,
      sex:  "男",
   }

   // 指针变量
   cla := new(Class)
   cla.Name = "1班"
   cla.Grade = 3
   stu.Class = cla

   // Marshal失败时err!=nil
   jsonStu, err := json.Marshal(stu)
   if err != nil {
      fmt.Println("生成json字符串错误")
   }

   // jsonStu是[]byte类型,转化成string类型便于查看
   fmt.Println(string(jsonStu))
}

输出结果:

代码语言:txt
AI代码解释
复制
{"name":"张三","Age":18,"HIgh":true,"class":{"Name":"1班","Grade":3}}

二. json转struct

代码语言:txt
AI代码解释
复制
package main

import (
   "encoding/json"
   "fmt"
)

// StuRead TODO
type StuRead struct {
   Name  interface{} `json:"name"`
   Age   interface{}
   HIgh  interface{}
   sex   interface{}
   Class interface{} `json:"class"`
   Test  interface{}
}

// Class TODO
type Class struct {
   Name  string
   Grade int
}

func main() {
   // json字符中的"引号,需用\进行转义,否则编译出错
   // json字符串沿用上面的结果,但对key进行了大小的修改,并添加了sex数据
   data := "{\"name\":\"张三\",\"Age\":18,\"high\":true,\"sex\":\"男\",\"CLASS\":{\"naME\":\"1班\",\"GradE\":3}}"
   str := []byte(data)

   // 1.Unmarshal的第一个参数是json字符串,第二个参数是接受json解析的数据结构。
   // 第二个参数必须是指针,否则无法接收解析的数据,如stu仍为空对象StuRead{}
   // 2.可以直接stu:=new(StuRead),此时的stu自身就是指针
   stu := StuRead{}
   err := json.Unmarshal(str, &stu)

   // 解析失败会报错,如json字符串格式不对,缺"号,缺}等。
   if err != nil {
      fmt.Println(err)
   }

   fmt.Println(stu)
}

输出结果

代码语言:txt
AI代码解释
复制
{张三 18 true 男 map[GradE:3 naME:1班] <nil>}

参考链接

  1. 理解 Go 中的 JSON
  2. Go的json解析:Marshal与Unmarshal

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【实践】Go的json解析:Marshal与Unmarshal
Json(Javascript Object Nanotation)是一种数据交换格式,常用于前后端数据传输。任意一端将数据转换成json 字符串,另一端再将该字符串解析成相应的数据结构,如string类型,strcut对象等。
辉哥
2019/09/29
11.3K0
Golang json解析与生成
JSON(Javascript Object Notation)是一种轻量级的数据交换语言,以文字为基础,具有自我描述性且易于让人阅读。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。JSON与XML最大的不同在于XML是一个完整的标记语言,而JSON不是。JSON由于比XML更小、更快,更易解析,以及浏览器的內建快速解析支持,使得其更适用于网络数据传输领域。
恋喵大鲤鱼
2019/06/14
2.9K0
Go语言——Json处理
 JSON (JavaScript Object Notation)是一种比XML更轻量级的数据交换格式,在易于人们阅读和编写的同时,也易于程序解析和生成。
传说之下的花儿
2023/04/16
2K0
Go语言——Json处理
Go中JSON转换与泛型
在这个版本中,Go核心团队进行了自Go语言开源以来最大的一次语法特性变更,引入了对使用参数化类型的泛型代码的支持。
码客说
2024/03/29
3160
Go语言中的JSON处理
在Go语言中,编码JSON数据是指将Go的数据类型(如结构体、切片、映射等)转换为JSON格式。encoding/json包中的json.Marshal函数用于将Go数据结构转换为JSON。
数字扫地僧
2024/06/26
1290
golang json 序列化、反序列化 字符串反序列化
在使用Golang进行开发时,经常会遇到需要将一段JSON字符串进行序列化和反序列化的情况。JSON是一种轻量级数据交换格式,常用于前后端数据传输、存储等场景。Golang提供了内置的​​encoding/json​​包来处理JSON的序列化和反序列化。
大盘鸡拌面
2023/11/11
1.2K0
go语言学习-json 解析
Json 是一种比 XML 更轻量级的数据交换格式,易于人们阅读和编写,也易于程序解析 和生成。是较理想的、跨平台的、跨语言的数据交换语言,应用十分广泛。
solate
2019/07/22
6320
encoding/json
func Marshal(v interface{}) ([]byte, error)
酷走天涯
2019/06/11
6210
encoding/json
Golang之json序列化(struct,int,map,slice)
老规矩,直接上代码 package main import ( "encoding/json" "fmt" ) //把结构体都改小写 type User struct { UserName string `json:"user_name"` //json的tag标记 Nickname string `json:"nickname"` Age int Birthday string Sex string Email
超蛋lhy
2018/08/31
1.9K0
Go程序例子(55):JSON
Go语言提供了对JSON编码和解码的内置支持,这包括对内置数据类型以及自定义数据类型的转换。
用户11078756
2025/01/16
1170
Go程序例子(55):JSON
go笔记:json的简单处理
json的本质就是数组和字典的组合,但系统的数组和字典都是确定类型的,所以,go的interface{}就能大显身手了。 下面的代码描述了自定义类型 List和Dict。有了这两个工具,处理json就非常的方便。
超级大猪
2019/11/22
7120
golang学习笔记——json数据
Name string `json:"name"` //指定json中显示的名称,使用"-"表示不输出
码缘
2021/03/04
3830
Golang之旅17-结构体可见性和JSON序列化
结构体中字段大写开头表示可公开访问,小写表示私有(仅在定义当前结构体的包中可访问)
皮大大
2021/03/02
1.1K0
Go Json 坑
为什么float64可能出现精度缺失,就必须要搞清楚二进制科学计算法和IEEE754标准的基本原理。
Michel_Rolle
2024/06/08
2.6K0
Go-标准库-encoding(一)
encoding 包是 Go 标准库中的一个重要包,主要用于数据编码和解码。encoding 包中包含了许多常用的数据编码和解码算法,如 JSON、XML、CSV、Base64 等,这些算法可以帮助我们将数据从一种格式转换为另一种格式,便于在不同的系统之间传输和处理。
堕落飞鸟
2023/04/22
4040
go语言json操作指南
1、Go语言的JSON 库   Go语言自带的JSON转换库为 encoding/json 1.1)其中把对象转换为JSON的方法(函数)为 json.Marshal(),其函数原型如下 func Marshal(v interface{}) ([]byte, error)     也就是说,这个函数接收任意类型的数据 v,并转换为字节数组类型,返回值就是我们想要的JSON数据和一个错误代码。当转换成功的时候,这个错误代码为nil     在进行对象转换为 JSON 的过程中,会遵循如下几条规则:  
李海彬
2018/03/23
1.4K0
开发外包--golang熟练之json相互转换(三)
Godev
2023/07/26
6270
在Go语言中使用JSON
Encode 将一个对象编码成JSON数据,接受一个interface{}对象,返回[]byte和error: func Marshal(v interface{}) ([]byte, error) Marshal函数将会递归遍历整个对象,依次按成员类型对这个对象进行编码,类型转换规则如下: bool类型 转换为JSON的Boolean 整数,浮点数等数值类型 转换为JSON的Number string 转换为JSON的字符串(带""引号) struct 转换为JSON的Object,再根据各个成员的类
李海彬
2018/03/26
9850
Go语言实战笔记(二十五)| Go Struct Tag
在上一篇介绍Go反射的时候,提到了如何通过反射获取Struct的Tag,这一篇文章主要就是介绍这个的使用和原理,在介绍之前我们先看一下JSON字符串和Struct类型相互转换的例子。
飞雪无情
2018/08/28
7140
【Go 语言社区】Go学习笔记:json处理
Encode 将一个对象编码成JSON数据,接受一个interface{}对象,返回[]byte和error: func Marshal(v interface{}) ([]byte, error) Marshal函数将会递归遍历整个对象,依次按成员类型对这个对象进行编码,类型转换规则如下: bool类型 转换为JSON的Boolean 整数,浮点数等数值类型 转换为JSON的Number string 转换为JSON的字符串(带""引号) struct 转换为JSON的Object,再根据各个成员的类
李海彬
2018/03/20
2.2K0
相关推荐
【实践】Go的json解析:Marshal与Unmarshal
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档