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 互相转换的更多相关文章

  1. java中Array/List/Map/Object与Json互相转换详解

    http://blog.csdn.net/xiaomu709421487/article/details/51456705 JSON(JavaScript Object Notation): 是一种轻 ...

  2. json格式转换成Map的应用

    jsp 1.引用json.js(将json格式转换成字符串) 2. var name = document.getElementById("name").value; var re ...

  3. java中Array/List/Map/Object与Json互相转换详解(转载)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Langu ...

  4. [转] golang中struct、json、map互相转化

    一.Json和struct互换 (1)Json转struct例子: type People struct { Name string `json:"name_title"` Age ...

  5. 用jackson包实现json、对象、Map之间的转换

    jackson API的使用 用jackson包实现json.对象.Map之间的转换

  6. 利用阿里巴巴封装的FastJSON来解析json并转换成map

    利用阿里巴巴封装的FastJSON来解析json并转换成map   package com.zkn.newlearn.json; import com.alibaba.fastjson.JSON; i ...

  7. java中将数组、对象、Map、List转换成JSON数据

    如果要将数组.对象.Map.List转换成JSON数据,那我们需要一些jar包: json-lib-2.4-jdk15.jar ezmorph-1.0.6.jar commons-logging.ja ...

  8. fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题

    fastjson在将Map<Integer, String>转换成JSON字符串时,出现中文乱码问题. 先记下这个坑,改天在看看是怎么导致的,暂时通过避免使用Integer作为键(使用St ...

  9. 使用fastjson的parseObject方法将json字符串转换成Map 或者List

    fastjson 转换成map HashMap<String,String> map = JSON.parseObject(jsonStr,new TypeReference<Has ...

随机推荐

  1. 在CentOS6.9 x86下编译libusb-1.0.22遇到的两个问题

    OS版本:CentOS 6.9 x86,内核版本2.6.32 问题一:configure.ac:36: error: Autoconf version 2.69 or higher is requir ...

  2. SQL游标在递归是的时候提示 "游标" 名称已经存在的问题

    游标的语法: DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ] [ FORWARD_ONLY | SCROLL ] [ STATIC | KEYSET | D ...

  3. CodeForces - 864C-Bus-(模拟加油站问题)

    https://vjudge.net/problem/CodeForces-864C 题意:两地之间有个加油站,往返走k个单程,最少加油多少次. 大佬几十行代码就解决,我却要用一百多行的if语句模拟解 ...

  4. SSM商城项目(十一)

    1.   学习计划 1.sso注册功能实现 2.sso登录功能实现 3.通过token获得用户信息 Ajax跨域请求(jsonp) 2.   Sso系统工程搭建 需要创建一个sso服务工程,可以参考e ...

  5. ES6你不知道的let关键字及变量的提升

    一.JavaScript变量创建到访问赋值的过程 创建 create/declare 初始化 initialize 赋值 assign 1.函数的提升 // 函数这种变量声明,首先会创建变量,再初始化 ...

  6. mapreduce 内存分配

    稍微有点mapreduce使用经验的同学肯定对OOM不陌生,对的,我目前在mapReduce里面遇到的最多的报错也是内存分配出错,所以看到好多hadoop执行脚本里面有好多关于内存的参数,虽然是知道和 ...

  7. 自己实现HashMap

    一载体 HashMap是由数组组成,数组元素为哈希链. 数组 public class MyHashMap<K, V> { transient Node<K, V>[] tab ...

  8. Ubuntu开机时提示“piix4_smbus 0000:00:07.3: SMBus Host controller not enabled”

    问题描述:Ubuntu开机时提示“piix4_smbus 0000:00:07.3: SMBus Host controller not enabled” 版本:Ubuntu 18.04    VMw ...

  9. 关于webApi 跨域请求

    先说一下我的项目,后台单纯的webApi,前端采用Vue+axios, 说一下我遇见的问题,axios请求webAPI但是浏览器会报错,大致上就是不允许跨域请求. 于是查找解决办法发现以下代码(web ...

  10. 2019-04(1)(Python学习)

    9.1 迭代器 创建迭代器的3种方法: 方法一: 容器对象添加 __iter__() 和 __next__() 方法(Python 2.7 中是 next()):__iter__() 返回迭代器对象本 ...