如何將 Go 結構體轉換為 JSON

  1. 將 Go 結構體轉換為 JSON
  2. 在 Go 中將巢狀結構轉換為 JSON
  3. 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"
  }
}
comments powered by Disqus