Go的反序列化:将json字符串 反序列化成对应数据(比如:结构体,map,切片) (Golang经典编程案例)

json反序列化是指,将json字符串 反序列化成对应数据(比如:结构体,map,切片)

下面分别将struct,map,slice 反序列化成对应数据。

案例1:将json字符串,反序列化成struct

package main

import (
	"encoding/json"
	"fmt"
)

type Hero struct {
	Name string
	Age int
	Birthday string
	Sal float64
	Skill string
}
//将json字符串,反序列化成struct
func unmarshalStruct() {
	//说明:str在项目的开发中,是通过网络传输获取到,或者读取文件获取到
	str := "{\"Name\":\"张三丰\",\"Age\":98,\"Birthday\":\"2001-09-21\",\"Sal\":3800.85,\"Skill\":\"武当剑法\"}"

	//定义一个Hero实例
	var hero Hero
	err := json.Unmarshal([]byte(str), &hero)
	if err != nil {
		fmt.Printf("unmarshal err=%v\n", err)
	}
	fmt.Printf("反序列化后 hero=%v hero.Name=%v\n", hero, hero.Name)
}

func main() {
	unmarshalStruct()
}

执行结果如下图所示:
Go的反序列化:将json字符串 反序列化成对应数据(比如:结构体,map,切片) (Golang经典编程案例)_第1张图片

案例2:将json字符串,反序列化成map

package main

import (
	"encoding/json"
	"fmt"
)

//将json字符串,反序列化成map
func unmarshalMap() {
	str := "{\"name\":\"张无忌\",\"age\":18,\"address\":\"武当剑法\"}"

	//定义一个map
	var a map[string]interface{}

	//注意:反序列化map,不需要make,因为make操作被封装到Unmarshal函数
	err := json.Unmarshal([]byte(str), &a)
	if err != nil {
		fmt.Printf("unmarshal err=%v\n", err)
	}
	fmt.Printf("反序列化后 a=%v\n", a)
}

func main() {
	unmarshalMap()
}

执行结果如下:
Go的反序列化:将json字符串 反序列化成对应数据(比如:结构体,map,切片) (Golang经典编程案例)_第2张图片

案例3:将json字符串,反序列化成slice

package main

import (
	"encoding/json"
	"fmt"
)

//将json字符串,反序列化成切片
func unmarshalSlice() {
	str := "[{\"address\":\"北京\",\"age\":8,\"name\":\"tom\"}," +
		"{\"address\":[\"河南\",\"上海\"],\"age\":18,\"name\":\"mary\"}]"

	//定义一个slice
	var slice []map[string]interface{}
	//注意:反序列化map,不需要make,因为make操作被封装到Unmarshal函数
	err := json.Unmarshal([]byte(str), &slice)
	if err != nil {
		fmt.Printf("unmarshal err=%v\n", err)
	}
	fmt.Printf("反序列化后 slice=%v\n", slice)
}

func main() {
	unmarshalSlice()
}

执行结果如下图:
Go的反序列化:将json字符串 反序列化成对应数据(比如:结构体,map,切片) (Golang经典编程案例)_第3张图片

你可能感兴趣的:(Go语言经典编程案例)