Go处理JSON数据的实现

作者:Hejjon 时间:2024-02-23 07:44:42 

Go 处理 json数据主要就是使用 json 包下的 Marshal 和 UnMarshal 两个函数。

定义结构体 User

type User struct {
   Name    string   `json:"name"`
   Age     int      `json:"age"`
   Height  float64  `json:"height"`
   Hobbies []string `json:"hobbies"`
}

json 标签定义的名称就是转json时的key

1. 结构体对象转 JSON 字符串

u := User{"张三", 19, 180.0, []string{"篮球", "跑步"}}
bytes, _ := json.Marshal(u)        // Marshal函数转成的是 byte 数组
jsonStr := string(bytes)        // 通过类型转换将字节数组转成json字符串
fmt.Println(jsonStr)

打印结果如下:

{"name":"张三","age":19,"height":180,"hobbies":["篮球","跑步"]}

2.  JSON 字符串转结构体对象

var u2 User        // 定义结构体变量接收
jsonStr := `{"name":"张三","age":19,"height":180,"hobbies":["篮球","跑步"]}`
_ = json.Unmarshal([]byte(jsonStr), &u2)    // 相反地类型转换将json字符串转成字节数组后 再调用 json.Unmarshal 函数
fmt.Println(u2)

打印结果如下:

{张三 19 180 [篮球 跑步]}

3. 结构体切片转JSON字符串

和对象类型一样,都是调用json包的 Marshal 方法

u1 := User{"张三", 19, 180.0, []string{"篮球", "跑步"}}
u2 := User{"李四", 18, 172.0, []string{"散步", "看书"}}
u3 := User{"王五", 20, 169.0, []string{"篮球", "爬山"}}
u4 := User{"赵六", 21, 158.0, []string{"乒乓球", "涉水"}}

// 定义切片
users := []User{u1, u2, u3, u4}
bytes, _ := json.Marshal(users)
jsonStr := string(bytes)
fmt.Println(jsonStr)

4. JSON字符串(JSON数组)转切片

var users2 []User        // 定义结构体切片
_ = json.Unmarshal([]byte(jsonStr), &users2)    // 将json数组(字符串)转成结构体切片
fmt.Println(users2)

参数 jsonStr 就是3中转成的json字符串

5. JSON 字符串转Map,不需要定义结构体

jsonStr := `{"name": "zhangsan", "age": 19}`
   mp := make(map[string]interface{})
   _ = json.Unmarshal([]byte(jsonStr), &mp)
   fmt.Println(mp)
   fmt.Println(mp["name"]) // zhangsan

// 遍历map
   for k, v := range mp {
       fmt.Println(k, v)
   }

来源:https://blog.csdn.net/qq_42026600/article/details/129037075

标签:Go,JSON
0
投稿

猜你喜欢

  • python 换位密码算法的实例详解

    2021-10-07 10:25:57
  • PHP使用缓存即时输出内容(output buffering)的方法

    2023-11-23 20:12:11
  • 浅谈Python xlwings 读取Excel文件的正确姿势

    2021-10-15 23:33:36
  • Python进行特征提取的示例代码

    2021-04-07 15:59:12
  • django中使用memcached示例详解

    2023-02-10 07:30:50
  • python-try-except:pass的用法及说明

    2022-07-21 13:22:24
  • Python实现爬取天气数据并可视化分析

    2023-02-09 00:33:14
  • Flask核心机制之上下文源码剖析

    2022-07-29 18:23:28
  • 浅谈pytorch grad_fn以及权重梯度不更新的问题

    2022-10-30 00:00:18
  • Python中使用摄像头实现简单的延时摄影技术

    2023-10-24 01:31:04
  • 在Pandas中处理NaN值的方法

    2021-05-31 05:37:22
  • vue3中使用ref和emit来减少props的使用示例详解

    2024-04-27 16:02:02
  • django 邮件发送模块smtp使用详解

    2021-09-24 23:04:15
  • Pytorch提取模型特征向量保存至csv的例子

    2022-09-28 00:41:17
  • python的help函数如何使用

    2023-12-21 10:46:48
  • python 限制函数调用次数的实例讲解

    2023-11-11 00:34:23
  • iscroll碰到Select无法选择下拉刷新的解决办法

    2024-05-11 09:33:35
  • windows mysql 自动备份的几种方法汇总

    2024-01-25 05:44:43
  • 用python制作个论文下载器(图形化界面)

    2022-08-01 00:04:15
  • Python自动连接ssh的方法

    2023-09-20 00:12:16
  • asp之家 网络编程 m.aspxhome.com