当前位置: 首页 > news >正文

网站建设栏目层级北京保障房建设项目网站

网站建设栏目层级,北京保障房建设项目网站,asp网站 底部版权所有,电子商务网站建设考试在编写 Web Service 等涉及数据序列化和反序列化的场景#xff0c;对于 JSON 类型的数据#xff0c;在 Go 中我们经常会使用到 encoding/json Package。最近微有所感#xff0c;小水一篇 omitempty JSON 数据的 UnMarshal 我们经常会配合 Struct Tags 使用#xff0c;让 …在编写 Web Service 等涉及数据序列化和反序列化的场景对于 JSON 类型的数据在 Go 中我们经常会使用到 encoding/json Package。最近微有所感小水一篇 omitempty JSON 数据的 UnMarshal 我们经常会配合 Struct Tags 使用让 Struct 的 Filed 与 JSON 数据的指定 property 绑定。 如果要序列化为 Go Struct 的 JSON 数据对应的 Fields 相关的 JSON properties 是缺失的我们经常会用 omitempty 标记 Go Fields序列化时JSON 数据中缺少的属性将会被设置为 Go 中对应的 zero-value比如 package mainimport (encoding/jsonfmt )type Person struct {Name string json:nameAge string json:age,omitemptyWeak bool json:weak,omitempty }func main() {jsonData : {name:ShanSan}req : Person{}_ json.Unmarshal([]byte(jsonData), req)fmt.Printf(%v, req)fmt.Println(req.Age) } // output // {Name:ShanSan Age: Weak:false} // Go Playground Link 但上面的例子对于一些场景的处理可能会有问题。看下下面这个例子 package mainimport (encoding/jsonfmt )type Person struct {Name string json:nameAge string json:age,omitemptyWeak bool json:weak,omitempty }func main() {jsonData : {name:ShanSan, age: }req : Person{}_ json.Unmarshal([]byte(jsonData), req)fmt.Printf(%v, req)fmt.Println(req.Age) } // output // {Name:ShanSan Age: Weak:false} // 可以看到 age 为 时和缺省时的结果是一样的。很显然上面的写法缺省的字段和空字段是没有被区分开的。对于一些数据的 Update 操作比如我们只想 Update Name 字段对应的 JSON 数据为 {name:ShanSan}执行上述的反序列化动作Age 字段会被设置为 empty stringWaek 也被设置为了 false这显然不是我们想看到的。 nil 一下 我们可以指针类型pointer type对上面的情况区分一下 package mainimport (encoding/jsonfmt )type Person struct {Name *string json:nameAge *string json:age,omitemptyWeak *bool json:weak,omitempty }func main() {jsonData : {name:ShanSan}jsonDataEmptyAge : {name:ShanSan, age: }req : Person{}reqEmptyAge : Person{}_ json.Unmarshal([]byte(jsonData), req)_ json.Unmarshal([]byte(jsonDataEmptyAge), reqEmptyAge)fmt.Printf(%v, req)fmt.Printf(%v, reqEmptyAge) } // {Name:0xc000010390 Age:nil Weak:nil}{Name:0xc0000103c0 Age:0xc0000103d0 Weak:nil} emmm缺省的字段为 nil 了。 Marshal 的时候 序列化 struct 的时候如果使用了 omitempty也会出现类似上面反序列化的情况对于缺省的 field 或者 zero-value序列化得到的 JSON 数据也会缺省相关属性此时我们也可以通过 pointer 保留相关字段如下 package mainimport (encoding/jsonfmt )type Student struct {Name string json:nameScore int json:score,omitempty }type StudentWithPointer struct {Name string json:nameScore *int json:score,omitempty }func main() {student : Student{Name: ShanSan,Score: 0,}score : 0studentWithPointer : StudentWithPointer{Name: ShanSan,Score: score,}data, _ : json.Marshal(student)dataWithPointer, _ : json.Marshal(studentWithPointer)fmt.Println(string(data))fmt.Println(string(dataWithPointer)) } // {name:ShanSan} // {name:ShanSan,score:0} Go Playground 参考 encoding/jsonDifferentiate between empty and not-set fields with JSON in GolangGos omitempty explained 本文由博客群发一文多发等运营工具平台 OpenWrite 发布
http://www.pierceye.com/news/743525/

相关文章:

  • 莱芜企业建站公司申请微信公众号
  • 手机网站 html5上海网站开发怎么做
  • 精密科技东莞网站建设ppt简约大气模板
  • 一家专做特卖的网站seo推广优化方案
  • 南沙门户网站建设监理工程师成绩在建设部哪个网站查
  • 做视频网站需要什么证件wordpress从
  • 算卦网站开发京东慧采入驻条件及费用2023年
  • 网站建设好后如何提交搜索引擎公共网络建设指导书
  • 做网站最快多久DW怎么做电商网站
  • 论坛模板网站建设鞍山市信息网站
  • 微网站的定义商城小程序开发报价
  • 做一网站要什么软件wordpress support hls player
  • 青岛网站制作服务装饰设计素描
  • 物流网站公司站外调用WordPress评论
  • 免费的行情网站下载安装拍艺术照
  • 佛山网站设计多少钱兴国做网站
  • 自己可以做网站生意好做吗手机制作音乐的软件app
  • 国土政务网站建设制度下载购物app
  • 阿里云一键建站网站网站前端浏览器兼容如何做
  • 如何看一个网站的备案在哪里做的多媒体资源库网站建设
  • 店铺推广软件广州推广优化
  • 做读书笔记的网站wordpress主题miku
  • 淘掌门官方网站wordpress注册验证邮箱验证
  • 牡丹江市建设局网站网站功能项目报价
  • 网站系统管理网站制作报价ihanshi
  • 陈村网站开发网站应该如何进行优化
  • 做网站什么语言最好电商有哪些平台app
  • 做号网站做旅游网站运营
  • 陕西省西安市网站建设公司都江堰网站建设
  • 怎么做网站xml地图导航条 Wordpress