package main
import (
"encoding/json"
"fmt"
)
// 定义手机屏幕
type Screen struct {
Size float32
ResX, ResY int
}
// 定义电池
type Battery struct {
Capacity int
}
// 生成json数据
func getJsonData() []byte {
// 匿名结构体初始化,结合结构体类型嵌套 组合成一次性更大的结构体
raw := &struct {
Screen
Battery
HasTouchID bool // 序列化时添加的字段:是否有指纹识别
}{
// 屏幕参数
Screen: Screen{
Size: 5.5,
ResX: 1920,
ResY: 1080,
},
// 电池参数
Battery: Battery{
2910,
},
// 是否有指纹识别
HasTouchID: true,
}
// 将数据序列化为json 匿名变量
jsonData, _ := json.Marshal(raw)
return jsonData
}
func main() {
jsonData := getJsonData()
fmt.Println(string(jsonData))
// 只需要屏幕和指纹识别信息的结构和实例
screenAndTouch := struct {
Screen
HasTouchID bool
}{}
// 反序列化得到数据
json.Unmarshal(jsonData, &screenAndTouch)
// 输出screenAndTouch的详细结构
fmt.Printf("%+v\n", screenAndTouch)
// 只需要电池和指纹识别信息的结构和实例
batteryAndTouch := struct {
Battery
HasTouchID bool
}{}
// 反序列化到batteryAndTouch
json.Unmarshal(jsonData, &batteryAndTouch)
// 输出screenAndTouch的详细结构
fmt.Printf("%+v\n", batteryAndTouch)
}
{"Size":5.5,"ResX":1920,"ResY":1080,"Capacity":2910,"HasTouchID":true}
{Screen:{Size:5.5 ResX:1920 ResY:1080} HasTouchID:true}
{Battery:{Capacity:2910} HasTouchID:true}