结构体 map slice 数据序列化
公用代码
package main
import(
"fmt"
"encoding/json"
)
//转换序列号
func testResult(data interface{}){
//返回 []byte 所以打印时需要string 转换
result , err := json.Marshal(&data);
if err != nil {
fmt.Printf("json 序列化错误=%v\n",err)
}
fmt.Printf("json 序列化结果=%v\n",string(result))
}
func main() {
testStruct()
testMap()
testSlice()
}
结构体 序列化
//tag 起别名
type structData struct {
Name string `json:"name"`
Age int `json:"age"`
Pay float64 `json:"pay"`
Address string `json:"address"`
}
//结构体 转换 json
func testStruct(){
structName := structData{
Name : "法外狂徒",
Age : 30,
Pay : 100000.0,
Address : "在国外",
}
testResult(&structName)
//结果 json 序列化结果={"Name":"法外狂徒","Age":30,"Pay":100000,"Address":"在国外"}
//结果 json 序列化结果={"name":"法外狂徒","age":30,"pay":100000,"address":"在国外"}
}
map 序列化
//map 转换 json
func testMap(){
var mapName map[string] interface{}
mapName = make(map[string] interface{})
mapName["name"] = "李三"
mapName["age"] = 16
mapName["address"] = []string{"天津市","河西区","黑牛城"}
testResult(mapName)
//结果 json 序列化结果={"address":["天津市","河西区","黑牛城"],"age":16,"name":"李三"}
}
slice 序列化
//切片 转换 json
func testSlice(){
var sliceName []map[string] interface{}
n1 := make(map[string] interface{})
n1["name"] = "李四"
n1["age"] = 20
n1["address"] = "喜马拉雅"
sliceName = append(sliceName,n1)
n2 := make(map[string] interface{})
n2["name"] = "欣"
n2["age"] = 26
n2["address"] = "安徽"
sliceName = append(sliceName,n2)
testResult(sliceName)
//结果 json 序列化结果=[{"address":"喜马拉雅","age":20,"name":"李四"},{"address":"安徽","age":26,"name":"欣"}]
}
结构体 map slice 数据反序列化
公用代码
package main
import(
"fmt"
"encoding/json"
)
//反序列化
func testResult(key string,target interface{}) {
err := json.Unmarshal([]byte(key),&target)
if err != nil {
fmt.Printf("反序列化 错误=%v \n",err)
}
// fmt.Printf("反序列化 结果=%v name=%v \n",key,structData.Name)
fmt.Printf("反序列化 结果=%v\n",key)
}
func main(){
testStruct()
}
结构体 反序列化
//结构体 反序列化
func testStruct(){
str := "{\"name\":\"法外狂徒\",\"age\":30,\"pay\":100000,\"address\":\"在国外\"}"
//定义一个结构体
var structData structData
testResult(str,&structData)
// fmt.Printf("%v",structData.Name)
//反序列化 结果={"name":"法外狂徒","age":30,"pay":100000,"address":"在国外"}
}
map 反序列化
// map 反序列化
func testMap(){
str := "{\"address\":[\"天津市\",\"河西区\",\"黑牛城\"],\"age\":16,\"name\":\"李三\"}"
var mapName map[string] interface{}
testResult(str,&mapName)
// fmt.Printf("%v",mapName["address"])
//反序列化 结果={"address":["天津市","河西区","黑牛城"],"age":16,"name":"李三"}
}
切片slice 反序列化
// 切片slice 反序列化
func testSlice(){
str := "[{\"address\":\"喜马拉雅\",\"age\":20,\"name\":\"李四\"},{\"address\":\"安徽\",\"age\":26,\"name\":\"欣\"}]"
var sliceName []map[string] interface{}
testResult(str,&sliceName)
// for _,v := range(sliceName){
// fmt.Printf("%v \n",v["address"])
// }
//喜马拉雅
//安徽
//结果 反序列化 结果=[{"address":"喜马拉雅","age":20,"name":"李四"},{"address":"安徽","age":26,"name":"欣"}]
}