GO语言学习笔记五
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
使用匿名结构体分离JSON数据
手机拥有屏幕电池指纹等信息这些信息填充到json数据中如果选择性的进行分离比较麻烦go语言正好可以通过匿名结构体完成数据分离的操作。
首先定义数据结构
type Screen struct{
size float32
resX,resY int
}
type Battery struct{
capacity int
}
这里分别定义了屏幕和电池的属性
然后准备JSON数据对结构体实例化
func genJsonData() []byte{
//完整的数据结构
raw := struct{
Screen
Battery
hasTouchID bool
}{
Screen: Screen{
size: 5.5,
resX: 1080,
resY: 1090
},
Battery: Battery{
capacty: 5000,
},
hasTouchID: true,
}
//对json数据序列化
jsonData,_ := json.Marshal(raw)
return jsonData
}
第三行定义了一个匿名结构体机构体内嵌了一个Screen和一个Battery结构体并加入了临时字段hasTouchID。
第19行使用json.Marshal()函数进行JSON序列化将raw变量转变成[]byte格式数据。
最后进行json数据分离
func main(){
//得到一段json数据
resData := genJsonData()
fmt.Println(string(resData))
//只需要屏幕和指纹的结构体实例
ScreenAndTouch := struct{
Screen
hasTouchID bool
}{}
//反序列化ScreenAndTouch
json.Unmarshal(resData,&ScreenAndTouch)
//输出ScreenAndTouch的详细结构
fmt.printf("%+v/n",ScreenAndTouch)
//只需要电池和指纹的结构体实例
BatteryAndTouch := struct{
Battery
hasTouchID bool
}{}
//反序列化BatteryAndTouch
json.Unmarshal(resData,&BatteryAndTouch)
//输出BatteryAndTouch的详细结构
fmt.Printf("%+v/n",BatteryAndTouch)
}
第三行得到byte类型的json数据rawData
第四行输出字符串类型的json数据
第六行定义只有屏幕属性和指纹属性的匿名结构体内部嵌入一个屏幕结构体
第九行的一对儿大括号表示对匿名结构体实例化
第十一行对byte数据反序列化
第十三行打印输出json数据格式
以下代码同上顺序