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 ...
随机推荐
- 吴裕雄 python 机器学习——线性回归模型
import numpy as np from sklearn import datasets,linear_model from sklearn.model_selection import tra ...
- Idea书签管理器的使用
1. 添加书签 以光标所在的行,为落点, 方式一: F11 , 添加一个默认的书签 方式二:Crtl + Shift + 数字 , 添加一个带编号 的书签 2. 查看书签 方式一:Shift + F1 ...
- C#使用Owin技术部署轻量级webApi服务
写在前面: 除了使用IIS可以启用WebApi之外,微软还提供了Owin技术,免除了IIS繁琐的部署配置,只需要运行编写好的程序,即可启用webApi服务,是不是很爽呢? 对于Owin技术的详细介绍这 ...
- rhce 第十题 配置NFS服务
配置NFS服务 在system1配置NFS服务,要求如下: 以只读的方式共享目录/public,同时只能被group8.example.com域中的系统访问 以读写的方式共享目录/protected, ...
- systemverilog soft constraint
1.class my_item; rand bit constrainted_random; rand bit usually_one; endclass class my_generator; my ...
- 【noip模拟赛5】细菌 状压dp
[noip模拟赛5]细菌 描述 近期,农场出现了D(1<=D<=15)种细菌.John要从他的 N(1<=N<=1,000)头奶牛中尽可能多地选些产奶.但是如果选中的奶牛携 ...
- 51单片机学习笔记(郭天祥版)(6)——键盘的作业题、AD、DA、DS18B20(这里之后看清翔的补一下好了)
A:analog,D:digital AD,就是模拟量转换为数字量,DA就是数字量转换为模拟量 为什么要转换? 单片机是数字芯片,内部只有0和1,没法表示模拟量 比如我们如果需要2.5V怎么办?其实是 ...
- php tp3.2生成二维码
public function qrcode() { // 二维码链接 $href = 'http://' . $_SERVER['HTTP_HOST'] . '/?g=diapp&m=reg ...
- java maven compiler设置默认1.8
方法一: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupI ...
- matplotlib 绘图报错 RuntimeError: Invalid DISPLAY variable
ssh 远程登录 Linux 服务器使用 matplotlib.pyplot 绘图时报错 原因: matplotlib 在 windows 下的默认 backend 是 TkAgg:在 Linux 下 ...