struct,map,json 互相转换
struct,map,json 互相转换
1.1 struct to json
很简单,使用encoding包可以互相转换,没什么好说的,但是有几点注意:
1.结构体内需要序列化的字段首字母大写(遵循驼峰式命名),不需要序列化的字段小写无所谓了
例: Username string `json:”username”` 将会使用username做json key值
2.如果需要序列化后的json key格式小写,需要加上json标签
例: `json:"password"`
3.json标签内,首字符如果是逗号,将使用字段输出,json标签内的指定key将自动忽略
例: `json:",password"` 加上逗号
4.如果需要忽略json输出,可以在json标签内,使用 ‘-‘,横线作忽略标记
例: `json:"-"` 作忽略
演示结构体转json
结果展示:
这种方式输出的json,是一行展示,一般测试的时候,我会这样输出,方便做字符串比较,但是如果调试的时候,我习惯换一种方式,输出的是json格式化之后的字符串,这样就不用json工具做转换了
结果:
1.2 json反序列化struct
2.1 struct转map
通过反射,拿到属性和值,属性做key,值做value,存储到map中,使用typeOf和valueOf,但是我当然是不喜欢了,我喜欢下面这种方式,使用valueOf就可以解决的问题,为啥非要多一步typeof
关于typeOf和valueOf,等我写反射的时候,再详细说
2.2反射第二种方式
当然了,方法还有,结构转json,都会了,map转json也是一样的,那很简单了,通过json做中间转换一下啊, (a=b知道了, b=c知道了 如何求ac,通过b转换啊)
2.3通过json转换
3.map转结构
map转结构,我看到一种写法使用第三方包,这个包叫mapstruct,只有decode方法,找半天,没找到encode,这么low么,我是不信的,只能map转成结构,结构无法回转吗,我是拒绝的