Goland json序列化、反序列化【反序列化成对应的数据类型比如:结构体、map、切片】

介绍

  json序列化是指: 将有key-value的结构体的数据类型(比如结构体、map、切片)序列化成json字符串的操作,对基本数据类型数列化意义不大

应用

type Monster struct {
   Name  string   `json:"monster_name"`  //反射机制
   Age   int
   Grade int
}
func (u *User) OrgList(ctx *gin.Context)  {

   //以下是序列化
   monster := Monster{
      Name: "小牛",
      Age:   3,
      Grade: 8,
   }
   //将结构体序列化
   data, err := json.Marshal(monster)
   if err != nil {
      fmt.Printf("序列号错误 err=%v\n", err)   
   }
   //输出序列化后的结果
   fmt.Printf("结构体 序列化后=%v\n", string(data))   
   结果: 
     结构体 序列化后={"monster_name":"小牛","Age":3,"Grade":8}

   //将map进行序列化
   var school map[string]interface{}
   school = map[string]interface{}{}
   school["name"] = "杭州一小"
   school["address"] = "杭州市滨江大道12号"
   mapData, err := json.Marshal(school)
   if err != nil {
      fmt.Printf("序列化错误 err=%v\n", err)
   }
   fmt.Printf("map 序列化后=%v\n", mapData)
   结果: 
    map 序列化后={"address":"杭州市滨江大道12号","name":"杭州一小"}

   //对切片进行序列化
   var slice []map[string]interface{}
   var m1 map[string]interface{}
   m1 = make(map[string]interface{})
   m1["name"] = "jack"
   m1["address"] = "天津"
   slice = append(slice, m1)

   sliceData, err := json.Marshal(slice)
   if err != nil {
      fmt.Printf("序列化错误 err=%v\n", err)
   }
   fmt.Printf("slice 序列化后=%v\n", sliceData)
   结果: 
    slice 序列化后=[{"address":"天津","name":"jack"}]
}

反序列化

//反序列化
//对结构体
var contraryMonster Monster
conErr := json.Unmarshal([]byte(monsterData), &contraryMonster)
if conErr != nil {
   fmt.Printf("反序列化错误 err=%v\n", conErr)
}
fmt.Printf("结构体反序列化后=%v, 名字是:%v \n", contraryMonster, contraryMonster.Name)
结果:
 结构体反序列化后={小牛 3 8}, 名字是:小牛

//对map进行反序列化
var contrarySchool map[string]interface{}
//注意: 反序列化map不需要make,因为make操作被封装到Unmarshal函数
conErr = json.Unmarshal([]byte(mapData), &contrarySchool)
if conErr != nil{
   fmt.Printf("反序列化错误 err=%v\n", conErr)
}
fmt.Printf("map反序列化后=%v\n", contrarySchool)
结果:
  map反序列化后=map[address:杭州市滨江大道12号 name:杭州一小]

//对切片进行反序列化
var contrarySlice []map[string]interface{}
//反序列化slice不需要make, 因为make操作被封装到Unmarshal 函数
conErr = json.Unmarshal([]byte(sliceData), &contrarySlice)
if conErr != nil {
   fmt.Printf("反序列化错误 err=%v\n", conErr)
}
fmt.Printf("map反序列化后=%v\n", contrarySlice)

 

    map反序列化后=[map[address:天津 name:jack]]

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值