编程笔记 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

相关文章

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

golang float和科学计数法转字符串的实现方式

《golangfloat和科学计数法转字符串的实现方式》:本文主要介绍golangfloat和科学计数法转字符串的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望... 目录golang float和科学计数法转字符串需要对float转字符串做处理总结golang float