结构体和 Json 相互转换(序列化反序列化)
关于 JSON 数据
Json 的基本格式如下:
{
"a": "Hello",
"b": "World"
}
结构体与 JSON 序列化
注意一个点:结构体内的私有属性不能被json包访问,如果结构体内部的属性都要就行转换,需要全部为公有属性(开头字符大写)
(结构体 ----> JSON格式字符串)
(JSON格式字符串 ----> 结构体)
Golang 中 的 序 列 化 和 反 序 列 化 主 要 通 过 "encoding/json" 包 中 的 json.Marshal() 和json.Unmarshal()方法实现;
结构体对象转化成 Json 字符串

package mainimport ("encoding/json""fmt"
)type Person struct{Name stringGender stringAge int
}func main() {var p1 = Person{Name: "奥特曼",Gender: "男",Age: 17,}fmt.Printf("%#v\n",p1)jsonByte,_ := json.Marshal(p1)jsonStr := string(jsonByte)fmt.Printf("%#v", jsonStr)}
![]()
错误案例如下:
package mainimport ("encoding/json""fmt"
)type Person struct{Name stringGender stringage int
}func main() {var p1 = Person{Name: "奥特曼",Gender: "男",age: 17,}fmt.Printf("%#v\n",p1)jsonByte,_ := json.Marshal(p1)jsonStr := string(jsonByte)fmt.Printf("%#v", jsonStr)}
![]()
Json 字符串转换成结构体对象

返回一个err;
如果err为空,转换成功;
err非空,转换失败
package mainimport ("encoding/json""fmt"
)type Person struct{Name stringGender stringage int
}func main() {var str = `{"Name":"奥特曼","Gender":"男","Age":17}`var p2 Personerr := json.Unmarshal([]byte(str), &p2)if err != nil { fmt.Println(err)}fmt.Printf("%#v\n", p2)fmt.Println(p2.Name)}

结构体标签 Tag
通过指定 tag 实现 json 序列化该字段时的 key
嵌套结构体和 JSON 序列化反序列化
package mainimport ("encoding/json""fmt"
)
type Person struct{Name string `json:"name"`Gender string `json:"gender"`Age int `json:"age"`
}type Group struct{Intrasting stringPerson []Person
}
func main() {h := Group{Intrasting: "绘画",Person: make([]Person, 0),}for i := 17; i < 20; i++ {p := Person{Name :fmt.Sprintf("编号%v", i), //字符串类型Gender:"男",Age : i+1,}h.Person = append(h.Person, p) //将P里的东西,添加到实例化的h后的切片内}// fmt.Println(c)strByte, err := json.Marshal(h)if err != nil {fmt.Println(err)} else {strJson := string(strByte)fmt.Println(strJson)}
}

逆序退回
package mainimport ("encoding/json""fmt"
)type Person struct{Name string `json:"name"`Gender string `json:"gender"`Age int `json:"age"`
}type Group struct{Intrasting stringPerson []Person
}func main() {jsonStr := `{"Intrasting":"绘画","Person":[{"name":"编号17","gender":"男","age":18},{"name":"编号18","gender":"男","age":19},{"name":"编号19","gender":"男","age":20}]}`var h = &Group{}err := json.Unmarshal([]byte(jsonStr), h)if err != nil {fmt.Println(err)} else {fmt.Printf("%#v\n", h)fmt.Printf("%v", h.Intrasting)}
}

相关文章:
结构体和 Json 相互转换(序列化反序列化)
关于 JSON 数据 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也 易于机器解析和生成。RESTfull Api 接口中返回的数据都是 json 数据。 Json 的基本格式如下: { "a": "Hello", "b": "…...
【力扣刷题 | 第二十四天】
目录 前言: 416. 分割等和子集 - 力扣(LeetCode) 总结 前言: 今晚我们爆刷动态规划类型的题目。 416. 分割等和子集 - 力扣(LeetCode) 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这…...
PyTorch使用(一)(常用库)
1.各大模型库 hub:简单来说就是专门为PyTorch集成的算法模型库 网站:GitHub - pytorch/hub: Submission to https://pytorch.org/hub/ Model Zoo:这个平台上提供预训练模型,在每个模型上,会标注出这个模型在GitHub的标…...
React ~ React Router 6
React Router 6 VS React Router 5.x 内置组件的变化; 移除<Switch /> , 新增<Routes />语法的变化; component { About } 变为 element { <About /> }新增多个hook官方明确推荐函数式组件了! 一级路由(变化) 安装路由 npm i react-router-dom (默认是最…...
【LeetCode每日一题】——304.二维区域和检索-矩阵不可变
文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 矩阵 二【题目难度】 中等 三【题目编号】 304.二维区域和检索-矩阵不可变 四【题目描述】 …...
硬件串口通信协议学习(UART、IIC、SPI、CAN)
0.前言 学习资料:江协科技的个人空间-江协科技个人主页-哔哩哔哩视频 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 全双工:通信…...
第一章-JavaScript基础进阶part2:事件
文章目录 概念一、注册事件(绑定事件)1.1 addEventListener事件监听 二、删除事件(解绑)三、DOM事件流四、事件对象event4.1 e.target与this与e.currentTarget的区别4.2 事件对象的常见属性 五、阻止事件默认行为及冒泡六、事件委…...
如何优雅的使用后端接口
优雅的后端接口 一个后端接口大致分为四个部分:接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响 应数据(response)。 一、URL & Method Rest 设计风格 》 Restful API 简单理解: URI 是用来唯一标志一个互联网资源;Me…...
QEMU源码全解析25 —— QOM介绍(14)
接前一篇文章:QEMU源码全解析24 —— QOM介绍(13) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM》源码解析与应用 —— 李强,机械工业出版社 特此致谢! 本文开始对于…...
TopK问题
topK问题: N个数找最大或者最小的前k个。 例子: 优质筛选(店面的排名) 10000个数,找出最大的前10个数 解决思路:建立大堆,然后pop9次 但是有些场景,上面的思路…...
接口自动化测试-Postman+Newman+Git+Jenkins实战集成(详细)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、Postman 创建…...
CMake 学习笔记 (Generator Expressions)
CMake 学习笔记 (Generator Expressions) Generator Expressions 可以认为是一种特殊的变量,它会在编译阶段求值。通常用在 target_link_libraries(), target_include_directories(), target_compile_definitions() 上。 用 Generator Expr…...
提高测试用例质量的6大注意事项
在软件测试中,经常会遇到测试用例设计不完整,用例没有完全覆盖需求等问题,这样往往容易造成测试工作效率低下,不能及时发现项目问题,无形中增加了项目风险。 因此提高测试用例质量,就显得尤为重要。一般来说…...
2023牛客暑期多校训练营6 A-Tree (kruskal重构树))
文章目录 题目大意题解参考代码 题目大意 ( 0 ≤ a i ≤ 1 ) , ( 1 ≤ c o s t i ≤ 1 0 9 ) (0\leq a_i\leq 1),(1 \leq cost_i\leq 10^9) (0≤ai≤1),(1≤costi≤109) 题解 提供一种新的算法,kruskal重构树。 该算法重新构树,按边权排序每一条边…...
软件测试—支付功能测试
有人问过我这样一个问题:作为一个支付平台,接入了快钱、易宝或直连银行等多家的渠道,内在的产品流程是自己的。业内有什么比较好的测试办法,来测试各渠道及其支持的银行通道呢? 回答:对支付平台而言&#…...
自动化测试的统筹规划
背景 回顾以前自动化测试编写的经历,主要是以开发者自驱动的方式进行,测试的编写随心而动,没有规划,也没有章法,这样就面临如下的一些问题: 测试用例设计不到位,覆盖不全,或者不够…...
外键字段的增删改查、多表查询(子查询和连表查询、正反向、聚合查询、 分组查询、 F与Q查询)、django中如何开启事务
一、 外键字段的增删改查 1.多对多的外键增删改查图书和作者是多对多,借助于第三张表实现的,如果想绑定图书和作者的关系,本质上就是在操作第三方表2.如何操作第三张表问题:让你给图书添加一个作者,他俩的关系可是多对…...
【学习笔记】生成式AI(ChatGPT原理,大型语言模型)
ChatGPT原理剖析 语言模型 文字接龙 ChatGPT在测试阶段是不联网的。 ChatGPT背后的关键技术:预训练(Pre-train) 又叫自监督式学习(Self-supervised Learning),得到的模型叫做基石模型(Founda…...
【Opencv入门到项目实战】(三):图像腐蚀与膨胀操作
文章目录 1.腐蚀操作2.膨胀操作3.开运算和闭运算4.礼帽与黑帽5.梯度运算 1.腐蚀操作 腐蚀操作是图像处理中常用的一种形态学操作,我们通常用于去除图像中的噪声、分割连通区域、减小目标物体的尺寸等。腐蚀操作的原理是,在给定的结构元素下,…...
Autosar诊断系列介绍20 - UDS应用层P2Server/P2Client等时间参数解析
本文框架 1. 前言2.几个时间参数含义2.1 P2Client与P2Server2.2 P2*Client与P2*Server2.3 P3Client_Phys与P3Client_Func2.4 S3Client与S3Server 1. 前言 本系列Autosar 诊断入门介绍,会详细介绍诊断相关基础知识,如您对诊断实战有更高需求,…...
一个简洁易用的 Delphi JSON 封装库,基于 System.JSON`单元封装,提供更直观的 API行
一、前言:什么是 OFA VQA 模型? OFA(One For All)是字节跳动提出的多模态预训练模型,支持视觉问答、图像描述、图像编辑等多种任务,其中视觉问答(VQA)是最常用的功能之一——输入一张…...
Rest.li代码生成器详解:如何自动生成数据绑定和客户端代码
Rest.li代码生成器详解:如何自动生成数据绑定和客户端代码 【免费下载链接】rest.li Rest.li is a RESTJSON framework for building robust, scalable service architectures using dynamic discovery and simple asynchronous APIs. 项目地址: https://gitcode.…...
Linux开发环境配置总结【Ubuntu22 VScode Mobaxterm】
文章目录前言按照名称找这些资源安装ubuntu 22 server的一些注意事项MobaXterm连接虚拟机VSCode相关的环境配置--------会用到的扩展--------VSCode的配置文件--------VSCode中进行编译--------VSCode中进行debug--------VSCode遇到的SSH连接问题(failed to fetch)--------虚拟…...
EasyVtuber未来发展规划:AI虚拟主播的技术趋势与创新方向
EasyVtuber未来发展规划:AI虚拟主播的技术趋势与创新方向 【免费下载链接】EasyVtuber Based on Talking-head-anime 3, works like Vtube Studio. 项目地址: https://gitcode.com/gh_mirrors/ea/EasyVtuber EasyVtuber是一款基于Talking-head-anime 3技术开…...
Go语言中的测试与基准测试:从单元测试到性能优化
Go语言中的测试与基准测试:从单元测试到性能优化 1. 测试的重要性 在软件开发中,测试是确保代码质量和可靠性的关键环节。Go语言内置了强大的测试框架,使得编写和运行测试变得简单高效。本文将详细介绍Go语言中的测试方法,从基础…...
SMUDebugTool深度实战指南:5大核心场景解锁AMD Ryzen系统极致性能
SMUDebugTool深度实战指南:5大核心场景解锁AMD Ryzen系统极致性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址:…...
【反蒸馏实战 04】前端开发工程师:当AI 5秒生成一个页面,你的价值在哪里?@初级前端从“切图仔”到“用户体验工程师”实战指南
摘要:2026年,AI已能5秒生成前端页面,60%的前端代码由AI产出,初级前端面临“100:1”的求职竞争。本文结合State of JS 2025、O’Reilly性能工程报告等权威数据,拆解AI对前端的冲击全景,提出“思维-能力-工作流”三级反替代模型。通过3个核心实操模块(AI生成代码审计、Cor…...
大数据开发学习Day10
一、Linux / Shell tee 双向输出 head/tail 日志查看 1. tee命令:从标准输入读取数据,同时输出到标准输出(屏幕) 和一个或多个文件 tee [选项] [文件...]-a, --append 追加到文件末尾,而不是覆盖 -i, --ignore-int…...
Phi-4-mini-reasoning vLLM部署进阶:量化加载(AWQ/GGUF)与推理提速实测
Phi-4-mini-reasoning vLLM部署进阶:量化加载(AWQ/GGUF)与推理提速实测 1. 模型简介与部署准备 Phi-4-mini-reasoning 是一个基于合成数据构建的轻量级开源模型,专注于高质量、密集推理的数据,并进一步微调以提高更高…...
SensitivityMatcher:终极免费鼠标灵敏度跨游戏转换工具
SensitivityMatcher:终极免费鼠标灵敏度跨游戏转换工具 【免费下载链接】SensitivityMatcher Script that can be used to convert your mouse sensitivity between different 3D games. 项目地址: https://gitcode.com/gh_mirrors/se/SensitivityMatcher 还…...
