Golang Json数据处理方法
2021-04-14 01:27
标签:lan class xxx odi 控制 文件 遍历 val util 我们可以直接将json数据映射到预定义好的结构体中,但是必须要确保json的字段和结构体必须要一致 代码示例: 运行该程序后,控制台打印如下信息: 但是有的时候,如果JSON数据的定义过于复杂化,我们就很需要一种灵活的方式来处理,在这种情况下,可以将JSON数据映射到一个 代码示例: 运行该程序后,控制台打印如下信息: Golang Json数据处理方法 标签:lan class xxx odi 控制 文件 遍历 val util 原文地址:https://www.cnblogs.com/jasonminghao/p/12379839.htmljson数据处理方法一
假设我们有如下data.json文件:{
"group":"1012",
"info":[
{
"name":"Jack",
"hobby":"basketball"
},
{
"name":"Xander",
"hobby":"running"
},
{
"name":"Eric",
"hobby":"running"
}
]
}
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
)
type (
studentInfo struct {
Name string `json:"name"`
Hobby string `json:"hobby"`
}
class struct {
Group string `json:"group"`
Info []studentInfo `json:"info"`
}
)
func main(){
var data class
// 读取json文件内容 返回字节切片
bytes,_ := ioutil.ReadFile("data.json")
// 将字节切片映射到指定结构体上
json.Unmarshal(bytes,&data)
// 打印对象结构
fmt.Println(data)
// 循环所有学生的信息
for idx,val := range data.Info{
fmt.Printf("index: %v 学生名:%v,爱好: %v\n",idx,val.Name,val.Hobby)
}
// 更改值
data.Group = "1013"
}
{1012 [{Jack basketball} {Xander running} {Eric running}]}
index: 0 学生名:Jack,爱好: basketball
index: 1 学生名:Xander,爱好: running
index: 2 学生名:Eric,爱好: running
json数据处理方式二
map
结构中
假设我们有如下data.json文件:[
"class":{
"name":"1013",
"teacher":"Mora"
},
"info":[
{
"name":"Jack",
"hobby":"basketball"
},
{
"name":"Xander",
"hobby":"running"
},
{
"name":"Eric",
"hobby":"running"
}
]
]
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
)
func main(){
// 读取json文件内容 返回字节切片
bytes,_ := ioutil.ReadFile("data.json")
// 将字节切片映射到指定map上
// key:string类型,value:interface{} 类型能存任何数据类型
var jsonObj map[string]interface{}
json.Unmarshal(bytes,&jsonObj)
// 将key:info 转换为[]interface{}类型(必须先转换成该类型才能实现range操作)
stu := jsonObj["info"].([]interface{})
// 打印对象结构
fmt.Println(jsonObj)
// 打印所有学生信息
for idx,item := range stu {
// 同样,遍历的时候也需要做转换
x := item.(map[string]interface{})
// 更改名字
//x["name"] = string("xxx")
fmt.Println(idx,x["name"])
}
}
map[group:1012 info:[map[hobby:basketball name:Jack] map[hobby:running name:Xander] map[hobby:running name:Eric]]]
0 Jack
1 Xander
2 Eric