Go之json數據


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"}

 


免責聲明!

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



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