Go 學習筆記 09 | Golang 結構體與 JSON 互相轉換


一、Golang 結構體與 JSON 互相轉換

JSON 是一種輕量級的數據交換格式。RESTful API 接口中返回的數據都是 JSON 數據。

JSON 基本格式:

{
	key: value,
}

結構體轉 JSON 舉例

package main

import (
	"fmt"
	"encoding/json"
)

type Student struct {
	ID     int
	Gender string
	Name   string
	Sno    string
}

func main() {
	var s1 = Student{
		ID:     12,
		Gender: "男",
		Name:   "李四",
		Sno:    "s001",
	}
    fmt.Printf("%#v\n", s1)

	jsonByte, _ := json.Marshal(s1)
	jsonStr := string(jsonByte)
	fmt.Printf("%v", jsonStr)
}

輸出:

main.Student{ID:12, Gender:"男", Name:"李四", Sno:"s001"}
{"ID":12,"Gender":"男","Name":"李四","Sno":"s001"}

JSON 轉結構體舉例

package main

import (
	"fmt"
	"encoding/json"
)

type Student struct {
	ID     int
	Gender string
	Name   string
	Sno    string
}

func main() {
	var str = `{"ID":12,"Gender":"男","Name":"李四","Sno":"s001"}`  // 使用反引號 ` 可以方便在多個引號 " 下不需要使用轉義符號來表示其他引號 "
	var s1 Student
	err := json.Unmarshal([]byte(str), &s1)

	if err != nil {
		fmt.Println(err)
	}
	fmt.Printf("%#v\n", s1)
	fmt.Println(s1.Name)
}

輸出:

main.Student{ID:12, Gender:"男", Name:"李四", Sno:"s001"}
李四

私有屬性不能被 JSON 包訪問

package main

import (
	"fmt"
	"encoding/json"
)

type Student struct {
	ID     int
	Gender string
	name   string  // 私有屬性不能被 JSON 包訪問
	Sno    string
}

func main() {
	var s1 = Student{
		ID:     12,
		Gender: "男",
		name:   "李四",
		Sno:    "s001",
	}
	fmt.Printf("%#v\n", s1)

	jsonByte, _ := json.Marshal(s1)
	jsonStr := string(jsonByte)
	fmt.Printf("%v", jsonStr)
}

輸出:

main.Student{ID:12, Gender:"男", name:"李四", Sno:"s001"}
{"ID":12,"Gender":"男","Sno":"s001"}

二、結構體標簽

package main

import (
	"fmt"
	"encoding/json"
)

type Student struct {
	Id     int `json:"id"`  // 通過 tag 指定轉換成的 json 字符串的 key
	Gender string `json:"gender"`
	name   string `json:"name"`
	Sno    string `json:"sno"`
}

func main() {
	var s1 = Student{
		Id:     12,
		Gender: "男",
		name:   "李四",
		Sno:    "s001",
	}
	fmt.Printf("%#v\n", s1)

	jsonByte, _ := json.Marshal(s1)
	jsonStr := string(jsonByte)
	fmt.Printf("%v", jsonStr)
}

輸出:

main.Student{Id:12, Gender:"男", name:"李四", Sno:"s001"}
{"id":12,"gender":"男","sno":"s001"}

Golang JSON 序列化:把結構體數據轉化成 JSON 格式的字符串。

Golang JSON 反序列化:把 JSON 數據轉化成 Golang 中的結構體對象。

三、參考教程

Golang 教程 P34


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM