package
0.0.0-20240927143213-b11bb4fab650
Repository: https://github.com/jocelynh1110/go-practice.git
Documentation: pkg.go.dev

# README

11-2-2 加上結構 JSON 標籤

可以給結構欄位加上標籤(tag),好讓 Unmarshal() 知道欄位要怎麼用在 JSON 解碼。

標籤必須用原始字串(用``括住)寫在欄位後面:

type person struct{
    LastName string `json:"lname"`
}

這個標籤 json 的值為 "lname",指 LastName 欄位要對應到 JSON 資料裡的 lname 鍵。
有了這個標籤,結構欄位的名稱就可以隨意命名了,但名稱需要大寫才能匯出。

  • Unmarshal() 會根據以下規則來決定要把 JSON 的鍵配對到哪個結構欄位:
    • 某個可匯出欄位的「標籤值」可以對應到 JSON 鍵。
    • 某個可匯出「欄位本身的名稱」有對應到 JSON 鍵(大小寫可不同)。
    • 找不到符合的欄位,該 JSON 鍵就會被略過(值不會放進結構的任何欄位)。

例子、

package main

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

type greeting struct {
	SomeMessage string `json:"message"`
}

func main() {
	// JSON 資料
	data := []byte(`
	{
		"message":"Greetings fellow gopher!"
	}
	`)

	// 檢查 JSON 格式是否不正確
	if !json.Valid(data) {
		fmt.Printf("JSON 格式無效:%s", data)
		os.Exit(1)
	}

	v := greeting{}
	err := json.Unmarshal(data, &v)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(v)
}

顯示結果:

{Greetings fellow gopher!}