如何将 Go 结构体转换为 JSON

Suraj Joshi 2023年1月30日 Go Go JSON Go Struct
  1. 将 Go 结构体转换为 JSON
  2. 在 Go 中将嵌套结构转换为 JSON
  3. Go 中结构体到 JSON 转换的缩进
如何将 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"  } } 
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

相关文章 - Go Struct