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()
}
发布了32 篇原创文章 · 获赞 16 · 访问量 4699

猜你喜欢

转载自blog.csdn.net/weixin_44879611/article/details/104185951