编程笔记 Golang基础 028 结构体与JSON

2024-02-24 13:20

本文主要是介绍编程笔记 Golang基础 028 结构体与JSON,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

编程笔记 Golang基础 028 结构体与JSON

  • 一、JSON
  • 二、结构体转JSON(序列化)
  • 三、JSON转结构体(反序列化)
  • 小结

结构体与JSON之间的相互转换是现代软件开发中数据处理的基础工具,极大地简化了数据在不同层次、不同组件间的流动与共享。

一、JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,但独立于语言,广泛应用于Web服务和应用程序之间进行数据传输。JSON的设计易于人类阅读和编写,并且易于机器解析和生成。

JSON的基本结构包括两种数据类型:对象(在大多数其他语言中对应字典或哈希表)和数组(对应列表或序列)。一个JSON对象由键值对组成,键是字符串,值可以是数字、字符串、布尔值、数组、另一个JSON对象,或者null。JSON数组则是有序的值集合,其元素可以包含上述任何类型的数据。

示例:

{"name": "John","age": 30,"isStudent": true,"favorites": ["apple", "banana"],"address": {"street": "123 Main St.","city": "New York"}
}

在这个例子中,我们有一个顶级JSON对象,它包含五个属性:

  • name 是一个字符串。
  • age 是一个数字。
  • isStudent 是一个布尔值。
  • favorites 是一个包含两个字符串元素的数组。
  • address 是另一个嵌套的JSON对象,其中包含了街道名和城市名。

JSON具有以下特性:

  1. 简洁 - JSON数据格式非常紧凑,便于网络传输。
  2. 层级清晰 - 数据以层次化的方式组织,便于理解与访问。
  3. 跨平台支持 - 大多数现代编程语言都提供了原生或第三方库来处理JSON数据。
  4. 自描述性 - JSON文档通常能够自我解释其内容结构。

由于这些优点,JSON被广泛应用在API接口设计、配置文件存储、前端与后端数据交互等多种场景中。

在Go语言中,encoding/json包提供了将结构体与JSON格式数据进行互相转换的功能。以下是如何进行结构体与JSON之间序列化(结构体转JSON)和反序列化(JSON转结构体)的示例:

二、结构体转JSON(序列化)

package mainimport ("encoding/json""fmt"
)// 定义一个结构体类型
type Person struct {Name string `json:"name"`Age  int    `json:"age"`
}func main() {// 创建Person结构体实例person := Person{Name: "Alice", Age: 30}// 序列化为JSON字符串personJSON, err := json.Marshal(person)if err != nil {panic(err) // 处理错误}fmt.Println(string(personJSON)) // 输出:{"name":"Alice","age":30}
}

三、JSON转结构体(反序列化)

package mainimport ("encoding/json""fmt"
)type Person struct {Name string `json:"name"`Age  int    `json:"age"`
}func main() {// JSON字符串jsonString := `{"name": "Bob", "age": 40}`// 反序列化为Person结构体实例var person Personerr := json.Unmarshal([]byte(jsonString), &person)if err != nil {panic(err) // 处理错误}fmt.Printf("Person: %+v\n", person) // 输出:Person: {Name:Alice Age:40}
}

注意事项:

  • 结构体字段标签(如json:"name")用于指定序列化时字段对应的JSON键名。
  • 结构体中的私有字段(首字母小写的字段)不会被自动序列化或反序列化。
  • 如果JSON数据中有额外的键值对,而结构体中没有对应的字段,这些额外的数据在反序列化过程中会被忽略。
  • 反序列化时,JSON数据的键必须能够映射到结构体中具有相应标签的字段,否则可能会导致解析失败。

小结

结构体与JSON之间的相互转换是现代软件开发中数据处理的基础工具,极大地简化了数据在不同层次、不同组件间的流动与共享。

这篇关于编程笔记 Golang基础 028 结构体与JSON的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/742224

相关文章

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。