做快手头像的网站,哈尔滨优化网站排名,wordpress 图片宽度,网站制作网站建设编程笔记 Golang基础 028 结构体与JSON 一、JSON二、结构体转JSON#xff08;序列化#xff09;三、JSON转结构体#xff08;反序列化#xff09;小结 结构体与JSON之间的相互转换是现代软件开发中数据处理的基础工具#xff0c;极大地简化了数据在不同层次、不同组件间的… 编程笔记 Golang基础 028 结构体与JSON 一、JSON二、结构体转JSON序列化三、JSON转结构体反序列化小结 结构体与JSON之间的相互转换是现代软件开发中数据处理的基础工具极大地简化了数据在不同层次、不同组件间的流动与共享。 一、JSON
JSONJavaScript 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具有以下特性
简洁 - JSON数据格式非常紧凑便于网络传输。层级清晰 - 数据以层次化的方式组织便于理解与访问。跨平台支持 - 大多数现代编程语言都提供了原生或第三方库来处理JSON数据。自描述性 - JSON文档通常能够自我解释其内容结构。
由于这些优点JSON被广泛应用在API接口设计、配置文件存储、前端与后端数据交互等多种场景中。
在Go语言中encoding/json包提供了将结构体与JSON格式数据进行互相转换的功能。以下是如何进行结构体与JSON之间序列化结构体转JSON和反序列化JSON转结构体的示例
二、结构体转JSON序列化
package mainimport (encoding/jsonfmt
)// 定义一个结构体类型
type Person struct {Name string json:nameAge 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/jsonfmt
)type Person struct {Name string json:nameAge 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之间的相互转换是现代软件开发中数据处理的基础工具极大地简化了数据在不同层次、不同组件间的流动与共享。