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:"-"` 作忽略
1.2结构体转json
func structToJson() {
user := User{, "李长全", ""}
result, _ := json.Marshal(user)
fmt.Println(string(result))
}
结果展示

这种方式输出的json,是一行展示,一般测试的时候,我会这样输出,方便做字符串比较,但是如果调试的时候,我习惯换一种方式,输出的是json格式化之后的字符串,这样就不用json工具做转换了
func structToJson() {
user := User{, "李长全", ""}
result, _ := json.MarshalIndent(user, "", " ")
fmt.Println(string(result))
}
结果展示

1.3 struct to json
func structToJson() {
user := User{, "李长全", ""}
result, _ := json.MarshalIndent(user, "", " ")
u := &User{}
json.Unmarshal(result, u)
fmt.Printf("%+v\n", u)
}
2.1struct转map
func Struct2Map(obj interface{}) map[string]interface{} {
t := reflect.TypeOf(obj) //使用反射,k根据typeof拿到field
v := reflect.ValueOf(obj) //v根据valueof拿到interface
var data = make(map[string]interface{})
for i := ; i < t.NumField(); i++ {
data[t.Field(i).Name] = v.Field(i).Interface()
}
return data
}
通过反射,拿到属性和值,属性做key,值做value,存储到map中,使用typeOf和valueOf,但是我当然是不喜欢了,我喜欢下面这种方式,使用valueOf就可以解决的问题,为啥非要多一步typeof
关于typeOf和valueOf,等我写反射的时候,再详细说
2.2反射第二种方式
func structToMap() {
a := User{, "李长全", ""}
elem := reflect.ValueOf(&a).Elem()
types := elem.Type()
m := map[string]interface{}{}
for i := ; i < types.NumField(); i++ {
m[types.Field(i).Name] = elem.Field(i).Interface()
}
}
当然了,方法还有,结构转json,都会了,map转json也是一样的,那很简单了,通过json做中间转换一下啊, (a=b知道了, b=c知道了 如何求ac,通过b转换啊)
2.3通过json转换
func structToEndMap() {
t := time.Now()
m := make(map[string]interface{})
user := User{, "李长全", ""}
j, _ := json.Marshal(user)
json.Unmarshal(j, &m)
fmt.Println(m)
fmt.Printf("duration:%d", time.Now().Sub(t))
}
3.map转结构
map转结构,我看到一种写法使用第三方包,这个包叫mapstruct,只有decode方法,找半天,没找到encode,这么low么,我是不信的,只能map转成结构,结构无法回转吗,我是拒绝的
func MapToStruct() {
mapInstance := make(map[string]interface{})
mapInstance["name"] = "lcq"
mapInstance["age"] =
var person User
if err := mapstructure.Decode(mapInstance, &person); err != nil {
fmt.Println(err)
}
fmt.Printf("struct:%v", person)
}
struct,map,json 互相转换的更多相关文章
- java中Array/List/Map/Object与Json互相转换详解
http://blog.csdn.net/xiaomu709421487/article/details/51456705 JSON(JavaScript Object Notation): 是一种轻 ...
- json格式转换成Map的应用
jsp 1.引用json.js(将json格式转换成字符串) 2. var name = document.getElementById("name").value; var re ...
- java中Array/List/Map/Object与Json互相转换详解(转载)
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Langu ...
- [转] golang中struct、json、map互相转化
一.Json和struct互换 (1)Json转struct例子: type People struct { Name string `json:"name_title"` Age ...
- 用jackson包实现json、对象、Map之间的转换
jackson API的使用 用jackson包实现json.对象.Map之间的转换
- 利用阿里巴巴封装的FastJSON来解析json并转换成map
利用阿里巴巴封装的FastJSON来解析json并转换成map package com.zkn.newlearn.json; import com.alibaba.fastjson.JSON; i ...
- java中将数组、对象、Map、List转换成JSON数据
如果要将数组.对象.Map.List转换成JSON数据,那我们需要一些jar包: json-lib-2.4-jdk15.jar ezmorph-1.0.6.jar commons-logging.ja ...
- fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题
fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题. 先记下这个坑,改天在看看是怎么导致的,暂时通过避免使用Integer作为键(使用St ...
- 使用fastjson的parseObject方法将json字符串转换成Map 或者List
fastjson 转换成map HashMap<String,String> map = JSON.parseObject(jsonStr,new TypeReference<Has ...
随机推荐
- ubuntu 快捷键
gnome-terminal and xfce4-terminal: Ctrl+Shift+c (copy) and Ctrl+Shift+v (paste) xterm: Ctrl+Insert ( ...
- iframe父页面获取子页面元素方法
1.window.frames["iframe的id"].contentDocument.getElementsByClassName("mycontainer" ...
- Xamarin.Form怎么调用原生方法
---恢复内容开始--- Xamarin.Form怎么调用原生包 今天我想和大家分享的是有关Xamarin如何调用安卓的原生代码,下面的例子以大家可能会经常用到的微信WX方法的调用. 首先我们新建一个 ...
- react rem
1 :安装 postcss-px2rem 2 在webpack.config.js 中添加 引入 const px2rem = require('postcss-px2rem'); 找到: lo ...
- python 并发编程 锁 / 信号量 / 事件 / 队列(进程间通信(IPC)) /生产者消费者模式
(1)锁:进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 虽然使用加锁的形式实现了 ...
- Spring:AOP
摘要 本文内容为我在网上搜集Spring AOP资料的汇总.摘抄. AOP是一种编程思想,其对不同对象进行了横向的抽象,将不同对象的.和主流程无关的公共逻辑抽象出来以方便维护.AOP的实现基础为AOP ...
- 关于有时候JQuery使用.val()赋值失败问题
jQuery中有3个获取元素value值的函数比较相似:attr(), prop(), val(): 具体作用网上比较多就不展示对比过程了,结果就是:prop()和val()都能获取到文本框的实际va ...
- 实用矩阵类(Matrix)(带测试)
引言: 无意间看到国外一个网站写的Matrix类,实现了加减乘除基本运算以及各自的const版本等等,功能还算比较完善,,于是记录下来,以备后用: #ifndef MATRIX_H #define M ...
- nginx 添加response响应头
硬添
- Unity3D-RayMarch-几何图元-3添加阴影
效果图: 在RayMarch渲染算法中计算阴影非常简单,当射线碰撞到物体,从碰撞点逆着光源方向再次执行射线步进算法,如果这一过程中碰撞到了其他物体,则碰撞点被其他物体遮挡,该处具有阴影. shader ...