go语言学习之JSON数据

Json序列化和反序列化

序列化 将数据转换成为json格式的
“encoding/json”
结构体的序列化

package main
import (
	"fmt"
	"encoding/json"
)

type User struct{
	Username string
	Nickname string
	Age int
	Birth string
	Sex int
	Email string
	Phone string 
}

func main(){
	user1 := &User{
		Username:"echo",
		Nickname:"qian",
		Age:22,
		Birth:"0324",
		Sex:1,
		Email:"[email protected]",
		Phone:"18821690781",
	}

	//结构体的序列化
	data, err := json.Marshal(user1)
	if err != nil{
		fmt.Println("failed!", err)
		return 
	}

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

map的序列化

package main
import (
	"fmt"
	"encoding/json"
)

func main(){
	 var m  map[string]interface{}
	 m = make(map[string]interface{})
	 m["Username"] = "echoqian"
	 m["Nickname"] = "qpy"
	 m["Age"] = 21
	 m["Sex"] = 1

	//map的序列化
	data, err := json.Marshal(m)
	if err != nil{
		fmt.Println("failed!", err)
		return 
	}

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

代码运行结果

[root@launch-wind day09]# go run args.go
{"Age":21,"Nickname":"qpy","Sex":1,"Username":"echoqian"}

切片的序列化

package main
import (
	"fmt"
	"encoding/json"
)

func main(){
	//每个元素是map的slice
	 var s  []map[string]interface{}
	 var m map[string]interface{}
	 m = make(map[string]interface{})
	 m["Username"] = "echoqian"
	 m["Nickname"] = "qpy"
	 m["Age"] = 21
	 m["Sex"] = 1
	 s = append(s,m)
	//再追加一个map到slice里面
	 m = make(map[string]interface{})
	 m["Username"] = "bobo陈"
	 m["Nickname"] = "hah"
	 m["Age"] = 25
	 m["Sex"] = 0
	 s = append(s,m)
	//slice的序列化
	data, err := json.Marshal(s)
	if err != nil{
		fmt.Println("failed!", err)
		return 
	}

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

代码运行结果

[root@launch-wind day09]# go run args.go
[{"Age":21,"Nickname":"qpy","Sex":1,"Username":"echoqian"},{"Age":25,"Nickname":"hah","Sex":0,"Username":"bobo?.}]

反序列化(把json数据转成成自己想要的数据)

将json数据反序列化为结构体形式

package main

import (
	"fmt"
	"encoding/json"
)

type User struct{
	Username string
	Nickname string
	Age int
	Birth string
	Sex int
	Email string
	Phone string 
}
//error是一种错误的类型
func testStruct() (ret string, err error) {

	user1 := &User{
		Username:"echo",
		Nickname:"qian",
		Age:22,
		Birth:"0324",
		Sex:1,
		Email:"[email protected]",
		Phone:"18821690781",
	}
	
	//结构体的序列化
	data, err := json.Marshal(user1)
	if err != nil{
		err = fmt.Errorf("failed!", err)
		return 
	}
	ret = string(data)
	return 
}
func test(){
	//得到一个json格式的数据
	data, err := testStruct()
	if err != nil{
		fmt.Println("test struct error")
		return 
	}

	//json序列化成为一个struct
	var user1 User
	json.Unmarshal([]byte(data), &user1)
	fmt.Println(user1)
}
func main(){
	test()
}

代码运行结果

[root@launch-wind day09]# go run json.go
{echo qian 22 0324 1 [email protected] 18821690781}

将json数据反序列化成为一个map,

json.Unmarshal([]byte(data), m) 此处传递引用就足够

猜你喜欢

转载自blog.csdn.net/qq_40477151/article/details/86022349