当前位置: 首页 > news >正文

GO: json 处理

需要引入"encoding/json"包

json解析到map

jsonStr := "{\"a\":\"test\",\"b\":\"testb\"}"
var dat map[string]string
err := json.Unmarshal([]byte(jsonStr), &dat)
if err == nil {fmt.Println(dat)
}结果:
map[a:test b:testb]

json解析到数组

	jsonStr := "[\"test\",\"testb\"]"var dat []stringerr := json.Unmarshal([]byte(jsonStr), &dat)if err == nil {fmt.Println(dat)}

json 解析到结构体

package mainimport ("encoding/json""fmt"
)type Person struct {//结构也是一种类型Name string //定义struct的属性Age  int
}func main() {   var person PersonjsonStr := "{\"Name\":\"test\",\"Age\":19}"if err := json.Unmarshal([]byte(jsonStr), &person); err == nil {fmt.Println(person)}
}
结果:
{test 19}

interface{}

如果不想用结构体,怎么办,如api接收过来的参数,不确定json串里面有什么数据类型,可通过interface{}实现

示例:

package mainimport ("encoding/json""fmt"
)
func main() {var data map[string]interface{}jsonStr := "{\"Name\":\"test\",\"Age\":19,\"infos\":[{\"info1\":\"hello\"},{\"info2\":\"hello\"}],\"pic\":{\"pic1\":\"img.jpg\"}}"err := json.Unmarshal([]byte(jsonStr), &data)if err != nil {fmt.Println(err)}fmt.Println(data)for _,value:=range data{switch value.(type) {case float64:fmt.Println(value)case string:fmt.Println(value)case []interface {}:for k,v:=range value.([]interface {}){fmt.Println(k,v)}case map[string]interface {}:for k,v:=range value.(map[string]interface {}){fmt.Println(k,v)}}}
}
输出结果:
map[infos:map[info:hello] Name:test Age:19]

将数组或结构体转成json

package mainimport ("encoding/json""fmt"
)
func main() { arr := []string{"aaa", "bbb", "ccc"}data, err := json.Marshal(arr)if err == nil {//data是[]byte类型,转化成string类型便于查看fmt.Println(string(data))}
}

小结:

1、用interface{}需要注意, JSON 里的数字默认都会转成 Golang 的 float64 类型,字符是string,使用方式为

fmt.Println(data["Name"].(string))
fmt.Println(data["Age"].(float64))

float64转其他类型,可参考:类型转换

2、golang 里json不是字符串而是 []byte类型,如果想用字符串可以用string()转。

http://www.lryc.cn/news/347978.html

相关文章:

  • HarmonyOS开发案例:【生活健康app之实现打卡功能】(2)
  • Mockito框架,帮助创建模拟对象进行测试的利器
  • Spring Boot的工作原理
  • 单点登录和统一身份认证的区别
  • 革新机器人任务规划:TREE-PLANNER引领高效、准确的机器人动作生成新趋势
  • 【数据分析面试】42.用户流失预测模型搭建(资料数据分享)
  • 5.13号模拟前端面试10问
  • 学习使用jQuery将光标移动到textarea的末尾
  • 【送书福利第七期】你好!Java(文末送书)
  • 申贷时,银行级大数据自己能查到吗?
  • 【SVN-TortoiseSVN】SVN 的简介与TortoiseSVN 安装使用教程
  • 5.13学习日志
  • 8种常见的CMD命令
  • 版本控制工具之Git的基础使用教程
  • 五子棋对战(网页版)
  • 在 Ubuntu系统中,可以使用以下几种方法查看网络速率
  • 这是摆脱困境的最好方法
  • OceanBase 中的ROWID与Oracle的差异与如何迁移
  • 秋招后端开发面试题 - JVM运行时数据区
  • 【YOLOv8改进[Backbone]】使用SCINet改进YOLOv8在黑暗环境的目标检测效果
  • ASE docker related research
  • maven .lastUpdated文件作用
  • gtest的编译与使用
  • 【 npm详解:从入门到精通】
  • 【Web后端】实现文件上传
  • react 逻辑 AND 运算符 ()
  • Redis详解(二)
  • 嵌入式:基于STM32的智能家居照明控制系统
  • 三种基本排序-冒泡,选择,二分
  • windows查找重复的物理地址