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"}
}
沒有留言:
張貼留言