目录

一、Json和struct互换

(1)Json转struct例子

(2)struct转json

二、json和map互转

(1)json转map例子

(2)map转Json例子

三、map和struct互转

(1)map转struct

(2)struct转map例子


一、Json和struct互换

(1)Json转struct例子

package mainimport ("fmt""encoding/json"
)type People struct {Name string `json:"name_title"`Age int `json:"age_size"`
}func JsonToStructDemo(){jsonStr := `{"name_title": "jqw""age_size":12}`var people Peoplejson.Unmarshal([]byte(jsonStr), &people)fmt.Println(people)
}func main(){JsonToStructDemo()
}

输出:

{0}

注意json里面的key和struct里面的key要一致,struct中的key的首字母必须大写,而json中大小写都可以。

(2)struct转json

在结构体中引入tag标签,这样匹配的时候json串对应的字段名需要与tag标签中定义的字段名匹配,当然tag中定义的名称不需要首字母大写,且对应的json串中字段名仍然大小写不敏感。此时,结构体中对应的字段名可以不用和匹配的一致,但是首字母必须大写,只有大写才是可对外提供访问的。

例子:

package mainimport ("fmt""encoding/json"
)type People struct {Name string `json:"name_title"`Age int `json:"age_size"`
}func StructToJsonDemo(){p := People{Name: "jqw",Age: 18,}jsonBytes, err := json.Marshal(p)if err != nil {fmt.Println(err)}fmt.Println(string(jsonBytes))
}func main(){StructToJsonDemo()
}

输出:

二、json和map互转

(1)json转map例子

func JsonToMapDemo(){jsonStr := `{"name": "jqw","age": 18}`var mapResult map[string]interface{}err := json.Unmarshal([]byte(jsonStr), &mapResult)if err != nil {fmt.Println("JsonToMapDemo err: ", err)}fmt.Println(mapResult)
}

输出:

(2)map转Json例子

func MapToJsonDemo1(){mapInstances := []map[string]interface{}{}instance_1 := map[string]interface{}{"name": "John", "age": 10}instance_2 := map[string]interface{}{"name": "Alex", "age": 12}mapInstances = append(mapInstances, instance_1, instance_2)jsonStr, err := json.Marshal(mapInstances)if err != nil {fmt.Println("MapToJsonDemo err: ", err)}fmt.Println(string(jsonStr))
}

输出:

例2:

func MapToJsonDemo2(){b, _ := json.Marshal(map[string]int{"test":1, "try":2})fmt.Println(string(b))
}

输出:

三、map和struct互转

(1)map转struct

需要安装一个第三方库

在命令行中运行: go get github.com/goinggo/mapstructure

例子:

func MapToStructDemo(){mapInstance := make(map[string]interface{})mapInstance["Name"] = "jqw"mapInstance["Age"] = 18var people Peopleerr := mapstructure.Decode(mapInstance, &people)if err != nil {fmt.Println(err)}fmt.Println(people)
}

输出

(2)struct转map例子

func StructToMapDemo(obj interface{}) map[string]interface{}{obj1 := reflect.TypeOf(obj)obj2 := reflect.ValueOf(obj)var data = make(map[string]interface{})for i := 0; i < obj1.NumField(); i++ {data[obj1.Field(i).Name] = obj2.Field(i).Interface()}return data
}
func TestStructToMap(){student := Student{10, "jqw", 18}data := StructToMapDemo(student)fmt.Println(data)
}

输出:

golang struct json map 互相转化相关推荐

  1. golang struct 转map 及 map[string]*Struct 初始化和遍历

    package mainimport ("encoding/json""errors""fmt""reflect"&qu ...

  2. golang API json,struct结构中标签(Tag)的使用

    在看别人的一些代码时,声明结构时有个json:name是做什么用的? 想知道原因得了解下: 在golang中,命名都是推荐都是用驼峰方式,并且在首字母大小写有特殊的语法含义:包外无法引用.但是由经常需 ...

  3. golang中如何比较struct,slice,map是否相等以及几种对比方法的区别

    一.前言 对比两个struct或者map,slice是否相等是大家经常会有的需求,想必大家也都接触过很多对比的方式,比如==,reflect.DeepEqual(),cmp.Equal()等. 这么多 ...

  4. Map与Json之间的转化

    1.Map转化成JSON package com.dbzhang.demo;import java.io.IOException; import java.util.HashMap; import j ...

  5. golang struct 切片数组去重

    目录 实例1 实例2 适配多个切片类型 实例1 type Fts_message_table_content_nomal struct {Docid int64 `xorm:"docid&q ...

  6. Golang 处理 Json(二):解码

    golang 编码 json 还比较简单,而解析 json 则非常蛋疼.不像 PHP 一句 json_decode() 就能搞定.之前项目开发中,为了兼容不同客户端的需求,请求的 content-ty ...

  7. redis-----07-----redigo基本命令操作(主要讲如何让go的struct、map展开成redis的参数,以及使用struct获取redis返回的key-value批量数组)

    1 请求回应模式 redis 与 client 之间采用请求回应模式,一个请求包对应一个回应包.但是也有例外,pub/sub 模式下,client 发送 subscribe 命令并收到回应包后,之后被 ...

  8. golang中json.Number妙用

    golang中json.Number妙用 最近跟某斯调试一个API接口,接口返回数据是json格式 ,按文档描述是一个整型数据,于是定义如下 type Data struct {Api int `js ...

  9. Golang处理JSON(二) 反序列化

    在Go语言中,encoding/json标准包处理json数据的序列化与反序列化问题.如果想了解序列化可以看这一篇序列化.与编码json的Marshal类似,解析json也提供了Unmarshal方法 ...

最新文章

  1. java如何获得wlan mac_Android M 如何获取 Wifi MAC地址
  2. bzoj 2121 DP
  3. grandle下载安装图解
  4. Element-UI-的布局和容器---Element-UI工作笔记003
  5. ios7学习之路六(隐藏状态栏 )
  6. python处理子进程_Python线程处理多个bash子进程?
  7. mysql学习一 常用语句
  8. unity-Profiler调试Android
  9. 公司、办公司内如何限制上外网因特网、只能连内网局域网 - 注册表工具软件、批处理办法 - 注册表转换成批处理BAT,批处理如何修改注册表
  10. Centos 6.5安装最新版谷歌浏览器-Chrome
  11. postgresql 存储过程处理json字符串
  12. java连接mongo数据库,并执行db.runCommand命令
  13. 2020年是走前端还是走后端好,前端又有哪些优势呢?
  14. rsync与scp对比
  15. python+opencv+图像特效(图像灰度处理、颜色翻转、图片融合,边缘检测,浮雕效果,颜色映射)
  16. 【软件技术基础】02
  17. openGauss数据库源码解析系列文章——存储引擎源码解析(四)
  18. 新松机器人产业小镇_总投资35亿元!新松机器人产业园及创新公共服务平台项目落户永修组团...
  19. 图解最常用的10个机器学习算法!(必须收藏)
  20. Java工程中的综合排序算法选取

热门文章

  1. 文档标题:WinNTWin2K下实现进程的完全隐藏
  2. 架构师之路 — API 经济 — RESTful API 设计规范原则
  3. 用 Flask 来写个轻博客 (15) — M(V)C_实现博文页面评论表单
  4. ubuntu编译linux报错/bin/sh: 1: mkimage: not found
  5. flask使用debug模式时,存在错误时,会占用设备内存直至服务重启才释放;debug模式会开启一个守护进程(daemon process)...
  6. CTF---Web入门第十二题 程序逻辑问题
  7. C# 制作开机自动启动程序
  8. 一个Portal处理流程
  9. WCF之服务实例管理
  10. C++ 莫队算法(转)