如何將 Go 結構體轉換為 JSON
    
    Suraj Joshi
    2023年1月30日
    
    Go
    Go JSON
    Go Struct
    
 
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 is a backend software engineer at Matrice.ai.
LinkedIn