#私藏项目实操分享# go JSON操作

书史足自悦,安用勤与劬。这篇文章主要讲述#私藏项目实操分享# go JSON操作相关的知识,希望能为你提供帮助。
生成json:
1.将struct或者map解析为json
范例:


package main

import (
"encoding/json"
"fmt"
)
type student struct {
Name string
Age int
School string
Kemu []string
}

func main(){
tommy := student{"tommy",27,"重庆大学",[]string{"物理","数学","化学"}}
json_tommy,err := json.Marshal(tommy)//转换为json,失败报错err
json_tommy2,err2 := json.MarshalIndent(tommy,""," ")//格式化转换为json,用户在界面可以看到格式化json,不是一排的
if err !=nil{
fmt.Println(err)
return
}
fmt.Println(string(json_tommy))
}

注意:结构体里面变量一定要大写,不然转换完是{}
如果想要转换完的key小写,可以通过struct_tag实现
  1. 通过map生成json
m := make(map[string]interface{},4)
m["name"] = "tommy"
m["age"] = 22
m["isactive"] = true
result,err :=json.Marshal(m)
if err != nil{
fmt.Println("Json解析错误")
}
fmt.Println(string(result))



JSON转为结构体或者map
json转结构体


package main
import (
"encoding/json"
"fmt"
)
type student struct {//丁一一一个结构体,里面key和类型和json一直
Name string `json:"name"`//注意,如果json key是小写,这里需要添加json:"json小写的字"
Age int
School string
Kemu []string
}
func main(){
json_data := `
{
"name": "tommy",
"Age": 27,
"School": "重庆大学",
"Kemu": [
"物理",
"数学",
"化学"
]}
`//定义一个json数据
var tmp student//定义一个student类型的变量
err:=json.Unmarshal([]byte(json_data),& tmp)//将json转换为结构体类型,注意1传入是一个切片的json,需要改变结构体类容,这里需要写结构体的指针
if err != nil{
fmt.Println(err)
return
}
fmt.Println(tmp)
}

json转换为map


json_data := `
{
"name": "tommy",
"Age": 27,
"School": "重庆大学",
"Kemu": [
"物理",
"数学",
"化学"
]}
`
var json_map map[string]interface{}//定义一个map,由于值不固定,采用interface空接口
err:=json.Unmarshal([]byte(json_data),& json_map)
if err != nil{
fmt.Println(err)
return
}
fmt.Println(json_map)
//如果需要用数据,因为map后面里面都是interface类型,需要断言才能用
for k,v := range json_map{
switch data:=v.(type) {
case string:
fmt.Println("index:%s,val:%vstring",k,data)
case int:
fmt.Println("index:%s,val:%vint",k,data)
case []interface{}://如果是切片是 []interface{}类型
fmt.Println("index:%s,val:%v[]interface{}",k,data)
}
}

【#私藏项目实操分享# go JSON操作】综上:json转为map简单,但是如果需要用就需要断言,很麻烦,所以最好是json转换结构体,结构体需要先定义

    推荐阅读