Json協議

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它使得人們很容易的進行閱讀和編寫。同時也方便了機器進行解析和生成。它是基於 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一個子集。 JSON採用完全獨立於程序語言的文本格式,但是也使用了類C語言的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成爲理想的數據交換語言。

詳細原文

Go與Json

  • 導入包:Import “encoding/json”
  • 序列化: json.Marshal(data interface{})
  • 反序列化: json.UnMarshal(data []byte, v interface{})

序列化例子

package main

import(
	"fmt"
	"encoding/json"
)

type User struct{
	UserName string `json:"userName"`
	NickName string `json:"nickName"`
	Age int `json:"age"`
	Birthday string
	Sex string
	Email string
	Phone string
}

// 測試根據Json協議打包自定的結構體
func testJson()  {
	
	// 自定結構
	user :=&User{
		UserName:"馬化騰",	
		NickName:"老馬",	
		Age:43, 
		Birthday:"2008/8/8",
		Sex:"男",
		Email:"馬化騰@qq.com",
		Phone:"110",
	}

	// 打包
	data,err := json.Marshal(user)
	if err !=nil{
		fmt.Println("Json.Marshal failed,err:",err)
		return
	}

	fmt.Printf("%s\n",data)

}

// 測試根據Json協議打包Int
func testJsonInt()  {
	var age = 100

	// 打包
	data,err := json.Marshal(age)
	if err !=nil{
		fmt.Println("Json.Marshal failed,err:",err)
		return
	}

	fmt.Printf("%s\n",data)
}

// 測試根據Json協議打包Map
func testJsonMap()  {
	var m map[string]interface{}
	m = make(map[string]interface{})

	m["userName"] = "user1"
	m["age"] = 18
	m["sex"] = "man"


	data,err := json.Marshal(m)
	if err !=nil{
		fmt.Println("Json.Marshal failed,err:",err)
		return
	}

	fmt.Printf("%s\n",data)
}

// 測試根據Json協議打包Slice
func testJsonSlice()  {
	var m map[string]interface{}
	m = make(map[string]interface{})

	m["userName"] = "user1"
	m["age"] = 18
	m["sex"] = "man"

	var s []map[string]interface{}
	s = append(s,m)

	m["userName"] = "user2"
	m["age"] = 20
	m["sex"] = "woman"

	s = append(s,m)

	data,err := json.Marshal(s)
	if err !=nil{
		fmt.Println("Json.Marshal failed,err:",err)
		return
	}

	fmt.Printf("%s\n",data)
}

func main()  {
	// testJson()

	// testJsonInt()

	// testJsonMap()

	// testJsonSlice()
}

反序列化例子

  • json.Unmarshal([]byte(data), &user1)
package main

import(
	"fmt"
	"encoding/json"
)

type User struct{
	UserName string `json:"userName"`
	NickName string `json:"nickName"`
	Age int `json:"age"`
	Birthday string
	Sex string
	Email string
	Phone string
}

// 測試根據Json協議打包自定的結構體
func testJson()(ret string, err error)  {
	
	// 自定結構
	user :=&User{
		UserName:"馬化騰",	
		NickName:"老馬",	
		Age:43, 
		Birthday:"2008/8/8",
		Sex:"男",
		Email:"馬化騰@qq.com",
		Phone:"110",
	}

	// 打包
	data,err := json.Marshal(user)
	if err !=nil{
		fmt.Println("Json.Marshal failed,err:",err)
		return
	}

	fmt.Printf("%s\n",data)

	ret = string(data)
	return
}

// 測試根據Json協議反序列化自定義結構
func testUnJsonStruct()  {
	data, err := testJson()
	if err != nil {
		fmt.Println("test struct failed, ", err)
		return
	}

	// 核心
	var user1 User
	err = json.Unmarshal([]byte(data), &user1)
	if err != nil {
		fmt.Println("Unmarshal failed, ", err)
		return
	}
	fmt.Println(user1)
}

func main()  {
	testUnJsonStruct()
}
發佈了36 篇原創文章 · 獲贊 22 · 訪問量 7166
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章