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

Posted lyy910203

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#私藏项目实操分享# 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:%v string",k,data)
case int:
fmt.Println("index:%s ,val:%v int",k,data)
case []interface{}: //如果是切片是 []interface{}类型
fmt.Println("index:%s ,val:%v []interface{}",k,data)
}
}

综上:json转为map简单,但是如果需要用就需要断言,很麻烦,所以最好是json转换结构体,结构体需要先定义

以上是关于#私藏项目实操分享# go JSON操作的主要内容,如果未能解决你的问题,请参考以下文章

Go 语言入门很简单 -- Go 语言解析JSON #私藏项目实操分享#

#私藏项目实操分享# go gin使用自定义中间件

跟着动画学Go数据结构之选择排序 #私藏项目实操分享#

跟着动画学 Go 数据结构之 Go 实现栈#私藏项目实操分享#

跟着动画学 Go 数据结构之 Go 实现栈#私藏项目实操分享#

Go 语言入门很简单 -- 12. Go 方法 #私藏项目实操分享#