新西兰服务器

Go中JSON解析时tag怎么用


Go中JSON解析时tag怎么用

发布时间:2022-01-17 12:07:30 来源:高防服务器网 阅读:54 作者:iii 栏目:开发技术

这篇文章主要介绍“Go中JSON解析时tag怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go中JSON解析时tag怎么用”文章能帮助大家解决问题。

在处理json格式字符串的时候,经常会看到声明struct结构的时候,属性的右侧还有反引号括起来的内容。形如:

 type User struct {       UserId   int    `json:"user_id" bson:"user_id"`       UserName string `json:"user_name" bson:"user_name"`   }

struct成员变量标签(Tag)说明

要比较详细的了解这个,要先了解一下golang的基础,在golang中,命名都是推荐都是用驼峰方式,并且在首字母大小写有特殊的语法含义:包外无法引用。但是由经常需要和其它的系统进行数据交互,例如转成json格式,存储到mongodb啊等等。这个时候如果用属性名来作为键值可能不一定会符合项目要求。

所以呢就多了反引号的内容,在golang中叫标签(Tag),在转换成其它数据格式的时候,会使用其中特定的字段作为键值。例如上例在转成json格式:

 u := &User{UserId: 1, UserName: "tony"}   j, _ := json.Marshal(u)   fmt.Println(string(j))  // 输出内容:  // {"user_id":1,"user_name":"tony"}  // 如果在属性中不增加标签说明,则输出:  // {"UserId":1,"UserName":"tony"}// 可以看到直接用struct的属性名做键值。  // ==其中还有一个bson的声明,这个是用在将数据存储到mongodb使用的==

struct成员变量标签(Tag)获取

那么当我们需要自己封装一些操作,需要用到Tag中的内容时,咋样去获取呢?这边可以使用反射包(reflect)中的方法来获取:完整代码如下:

package main    import (      "encoding/json"      "fmt"      "reflect"  )    func main() {      type User struct {          UserId   int    `json:"user_id" bson:"user_id"`          UserName string `json:"user_name" bson:"user_name"`      }      // 输出json格式      u := &User{UserId: 1, UserName: "tony"}      j, _ := json.Marshal(u)      fmt.Println(string(j))      // 输出内容:{"user_id":1,"user_name":"tony"}        // 获取tag中的内容      t := reflect.TypeOf(u)      field := t.Elem().Field(0)      fmt.Println(field.Tag.Get("json"))      // 输出:user_id      fmt.Println(field.Tag.Get("bson"))      // 输出:user_id  }

自定义tag

 type User struct {       UserId   int    `json:"user_id" bson:"user_id" test:"test"`       UserName string `json:"user_name" bson:"user_name"`   }

获取tag中test的值

// 获取tag中的内容  typeof := reflect.TypeOf(u)  field := typeof.Elem().Field(0)  fmt.Println(field.Tag.Get("json"))  // 输出:user_id  fmt.Println(field.Tag.Get("bson"))  // 输出:user_id  fmt.Println(field.Tag.Get("test"))  // 输出:test

关于“Go中JSON解析时tag怎么用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注高防服务器网行业资讯频道,小编每天都会为大家更新不同的知识点。

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[