Go之json資料

weixin_30639719發表於2020-04-05

json是一種輕量級的資料交換格式,有限提高資料在網路中的傳輸效率,易於閱讀和編寫資料,且易於生成key-value格式資料。

一:json資料的序列化舉例

package main

import (
	"fmt"
	"encoding/json"
)

//結構體變數序列化
type Personal struct{
	Name string
	Age int
	Hobby string
}

func StructJson() {
	personal := Personal{
		Name : "louis",
		Age : 18,
		Hobby : "it",
	}
	//json.Marshal返回[]byte與err
	personal_json, _:= json.Marshal(personal)
	//由於personal_json是[]byte資料型別,故要通過string()函式轉換
	fmt.Printf("personal_json=%v\n", string(personal_json))
}

//map資料序列化
func MapJson(){
	m := map[string]interface{}{
		"Address":"深圳",
		"Phone":"12345678911",
		"Salary":10000,
	}
	map_json, _ := json.Marshal(m)
	fmt.Printf("map_json=%v\n", string(map_json))
}

//切片序列化
func SliceJson(){
	s := []int{1,2,3,4,5,6,7,8}
	slice_json, _ := json.Marshal(s)
	fmt.Printf("slice_json=%v\n", string(slice_json))	
}

//基本資料型別序列化
func Base() {
	str := "string"
	base_json, _ := json.Marshal(str)
	fmt.Printf("base_json=%v\n", string(base_json))	
}
func main() {
	StructJson()
	MapJson()
	SliceJson()
	Base()
}
結果
[ `go run json.go` | done ]
	personal_json={"Name":"louis","Age":18,"Hobby":"it"}
	map_json={"Address":"深圳","Phone":"12345678911","Salary":10000}
	slice_json=[1,2,3,4,5,6,7,8]
	base_json="string"

 二:json反序列化

package main

import (
	"fmt"
	"encoding/json"
)

//結構體變數序列化
type Personal struct{
	Name string
	Age int
	Hobby string
}

func StructJson() {
	personal := Personal{
		Name : "louis",
		Age : 18,
		Hobby : "it",
	}
	//json.Marshal返回[]byte與err
	personal_json, _:= json.Marshal(personal)
	//由於personal_json是[]byte資料型別,故要通過string()函式轉換
	fmt.Printf("personal_json=%v\n", string(personal_json))
	var personal_data Personal
	//接受的變數必須為指標型別
	err := json.Unmarshal([]byte(personal_json), &personal_data)
	if err != nil {
		fmt.Printf("反序列化錯誤:%v\n", err)
	}
	fmt.Printf("personal_json反序列化=%v\n", personal_data)
}

func main() {
	StructJson()
}
結果
[ `go run json.go` | done ]
	personal_json={"Name":"louis","Age":18,"Hobby":"it"}
	personal_json反序列化={louis 18 it}

 三:結構體的序列化的反射機制

當結構體定義的欄位為大寫字母開頭,但客戶端希望接受到的都是小寫字母的欄位時,可以使用反射機制

package main

import (
	"fmt"
	"encoding/json"
)

//結構體變數序列化
type Personal struct{
	Name string `json:"name"`
	Age int `json:"age"`
	Hobby string `json:"hobby_data"`
}

func StructJson() {
	personal := Personal{
		Name : "louis",
		Age : 18,
		Hobby : "it",
	}
	personal_json, _:= json.Marshal(personal)
	fmt.Printf("personal_json=%v\n", string(personal_json))
}

func main() {
	StructJson()
}
結果
[ `go run json.go` | done ]
	personal_json={"name":"louis","age":18,"hobby_data":"it"}

 

轉載於:https://www.cnblogs.com/louis181214/p/10317581.html

相關文章