如何将 Go 结构体转换为 JSON
JSON 是一种轻量级语言独立格式,用于存储和传输数据。在 Go 中,我们有 encoding/json
包,其中包含许多用于 JSON 相关操作的内置方法。我们可以使用封送处理将结构数据转换为 JSON。
将 Go 结构体转换为 JSON
marshal
方法接收结构对象并返回编码数据的字节片,我们可以在 Go 中将其更改为 JSON。
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Name string `json:"empname"`
Number int `json:"empid"`
}
func main() {
employee_1 := &Employee{Name: "Dixya Lhyaho", Number: 10}
e, err := json.Marshal(employee_1)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(e))
}
输出:
{"empname":"Dixya Lhyaho","empid":10}
如果将 Number
属性更改为 number
,则编组过程中将忽略 number
,因为 json/encoding
包看不到它。
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Name string `json:"empname"`
number int `json:"empid"`
}
func main() {
employee_1 := &Employee{Name: "Dixya Lhyaho", number: 10}
e, err := json.Marshal(employee_1)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(e))
}
输出:
{"empname":"Dixya Lhyaho"}
在 Go 中将嵌套结构转换为 JSON
让我们用嵌套结构定义一个更复杂的结构。在结构的定义内,我们定义了 JSON 标记,这些标记将结构的字段直接映射到封送处理的 JSON 中的字段。
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Position string `json:"position"`
Name Name `json:"name"`
}
type Name struct {
FirstName string `json:"firstname"`
Surname string `json:"surname"`
}
func main() {
name := Name{FirstName: "Dikxya", Surname: "Lhyaho"}
employee := Employee{Position: "Senior Developer", Name: name}
byteArray, err := json.Marshal(employee)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(byteArray))
}
输出:
{"position":"Senior Developer","name":{"firstname":"Dikxya","surname":"Lhyaho"}}
Go 中结构体到 JSON 转换的缩进
我们可以使用 json.MarshalIndent()
函数代替 json.Marshal()
函数以更易读的格式打印 JSON。我们将两个附加参数,前缀字符串和缩进字符串传递给 MarshalIndent
。
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Position string `json:"position"`
Name Name `json:"name"`
}
type Name struct {
FirstName string `json:"firstname"`
Surname string `json:"surname"`
}
func main() {
name := Name{FirstName: "Dikxya", Surname: "Lhyaho"}
employee := Employee{Position: "Senior Developer", Name: name}
byteArray, err := json.MarshalIndent(employee, "", " ")
if err != nil {
fmt.Println(err)
}
fmt.Println(string(byteArray))
}
输出:
{
"position": "Senior Developer",
"name": {
"firstname": "Dikxya",
"surname": "Lhyaho"
}
}
相关文章
在 C 语言中使用 malloc 分配结构体内存
发布时间:2023/05/07 浏览次数:132 分类:C语言
-
本文演示了如何在 C 语言中使用 malloc 分配结构体内存。使用 malloc 与 sizeof 操作符在 C 语言中分配结构体内存的方法
在 C 语言中使用结体构对齐和填充
发布时间:2023/05/07 浏览次数:174 分类:C语言
-
本文演示了如何在 C 语言中使用结构体进行对齐和填充。了解 C 语言中对齐和填充的基础知识 内存中的所有对象都以主要数据类型表示
在 C 语言中从函数中返回结构体
发布时间:2023/05/07 浏览次数:165 分类:C语言
-
本文介绍了在 C 语言中如何从函数中返回一个结构体。使用标准符号从函数中返回结构体 C 语言中的 struct 关键字是用来实现用户定义的数据结构体。
在 C 语言中初始化结构体数组
发布时间:2023/05/07 浏览次数:131 分类:C语言
-
本文介绍了如何在 C 语言中初始化结构体数组。在 C 语言中使用列表符号初始化结构体数组 结构是派生数据类型,通常由多个成员组成。
C 语言中的结构体数组
发布时间:2023/05/07 浏览次数:187 分类:C语言
-
本教程介绍了在 C 语言中创建结构体数组的不同方法。C 语言中的结构体数组 数组是同一数据类型的顺序集合,结构体是用户定义的数据类型。
Golang 结构体数组
发布时间:2023/04/27 浏览次数:64 分类:Go
-
本篇文章介绍了如何在 Golang 中创建和使用结构数组。struct 在Golang中被认为是一种用户自定义类型,用于将不同类型的数据存储在一个类型中。
GoLang 对结构体切片进行排序
发布时间:2023/04/27 浏览次数:164 分类:Go
-
GoLang 提供了两种方法来对结构体切片进行排序; 一个是 sort.Slice ,另一个是 sort.SliceStable 。
在 Go 中获取结构体的字符串表示
发布时间:2023/04/27 浏览次数:123 分类:Go
-
Go 允许我们使用多种简单的标准方法从结构中序列化数据。在 Go 中使用 String 方法将结构体转换为字符串