golang 实现struct、json、map互相转化
作者:小拳头 时间:2024-02-15 12:30:40
一、Json和struct互换
(1)Json转struct例子:
package main
import (
"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 People
json.Unmarshal([]byte(jsonStr), &people)
fmt.Println(people)
}
func main(){
JsonToStructDemo()
}
输出:
注意json里面的key和struct里面的key要一致,struct中的key的首字母必须大写,而json中大小写都可以。
(2)struct转json
在结构体中引入tag标签,这样匹配的时候json串对应的字段名需要与tag标签中定义的字段名匹配,当然tag中定义的名称不需要首字母大写,且对应的json串中字段名仍然大小写不敏感。此时,结构体中对应的字段名可以不用和匹配的一致,但是首字母必须大写,只有大写才是可对外提供访问的。
例子:
package main
import (
"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"] = 18
var people People
err := 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)
}
输出:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/xiaoquantouer/article/details/80233177
标签:golang,struct,json,map
0
投稿
猜你喜欢
Python异常对象Exception基础类异常捕捉
2021-10-21 03:46:25
PHP使用星号替代用户名手机和邮箱的实现代码
2023-11-17 05:50:02
详解Go程序添加远程调用tcpdump功能
2024-05-21 10:18:45
浅谈Python中用datetime包进行对时间的一些操作
2022-09-27 09:32:14
MySQL时间格式化date_format使用语法
2024-01-23 07:31:36
pandas将list数据拆分成行或列的实现
2023-12-23 01:58:41
收藏整理的一些Python常用方法和技巧
2023-01-04 10:42:38
微信跳一跳游戏python脚本
2022-03-31 02:24:27
Python实现迭代时使用索引的方法示例
2022-12-15 11:08:48
详解Python中的字符串格式化
2023-09-10 22:38:14
详解微信小程序文件下载--视频和图片
2023-08-10 16:38:50
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2022-05-22 08:39:32
Python pandas DataFrame数据拼接方法
2022-11-08 08:09:36
五个Python命令使用的小妙招分享
2023-12-09 07:58:04
SQL SERVER使用表分区优化性能
2024-01-14 01:32:59
详解python持久化文件读写
2023-09-01 15:16:44
MySQL联合查询之轻松实现数据关联详解
2024-01-15 09:27:14
Python爬虫必备技巧详细总结
2022-10-02 12:47:44
pymongo实现多结果进行多列排序的方法
2023-08-27 21:33:42
Python二维码生成识别实例详解
2021-06-10 19:59:22