網頁

2022/3/25

Golang struct與JSON的轉換 struct and JSON conversion

Go把JSON轉為struct或struct轉為JSON的方式如下。


JSON轉struct用json.Unmarshal(data []byte, v any) error。第一個參數data為JSON byte,第二個參數v為接收轉換後的struct pointer。

struct轉JSON用json.Marshal(v any) ([]byte, error) 。第一個參數v為要轉為JSON的struct;回傳的第一個參數為轉換後的JSON byte。


範例

範例環境:

  • Go 1.17

例如下面把JSON字串s轉為struct Employee的變數emp然後再轉回JSON字串s

Employee屬性後方以json:開頭的字串為field tag,用來定義JSON欄位與屬性轉換時的對應名稱。若未定義field tag則預設以struct的屬性名稱為欄位名稱。

main.go

package main

import (
    "encoding/json"
    "fmt"
    "time"
)

type Employee struct {
    ID        int64     `json:"id"`
    Name      string    `json:"name"`
    Age       int       `json:"age"`
    CreatedAt time.Time `json:"createdAt"`
}

var s string = `
{
  "id": 1,
  "name": "john",
  "age": 33,
  "createdAt": "2022-01-19T12:34:56Z"
}`

func main() {
    var emp Employee
    err := json.Unmarshal([]byte(s), &emp) // json to struct
    if err != nil {
        panic(err)
    }
    fmt.Println(emp) // {1 john 33 2022-01-19 12:34:56 +0000 UTC}

    b, err := json.Marshal(emp) // struct to json
    if err != nil {
        panic(err)
    }
    s := string(b)
    fmt.Println(s) // {"id":1,"name":"john","age":33,"createdAt":"2022-01-19T12:34:56Z"}
}

github


沒有留言:

張貼留言