并保存Json"/>
Golang解析并保存Json
目录
1 解析json
1.1 解析到结构体
解析代码
解析结果
1.2 解析到接口
三方包安装
解析代码
解析结果
2 保存JSON文件
保存代码
输出结果
1 解析json
解析JSON有两种方式:
- 解析到结构体,适用于知晓被解析的JSON数据的结构的方案。
- 解析到接口,适用于不知道被解析的JSON数据结构的方案。
1.1 解析到结构体
解析代码
package main
import ("encoding/json""fmt"
)
type Server struct {ServerName string // 首字母大写,首字母不敏感,其他字母敏感ServerIP string // 首字母大写
}
type Serverslice struct {Servers []Server
}
func main() {var s Serverslice// 输入的json字符串str := `{"servers":[{"serverName":"Local_Web","serverIP":"127.0.0.1"},{"serverName":"Local_DB","serverIP":"127.0.0.1"}]}`json.Unmarshal([]byte(str), &s)// 输出转换后第一条fmt.Println(s.Servers[0])
}
解析结果
{Local_Web 127.0.0.1}
ps:
- struct中字段首字母需要大写
- 不想解析全部json字段时,只需要定义部分字段即可
1.2 解析到接口
Golang语言中interface{}可以用来存储任意数据类型的对象,这种数据结构正好可以存储解析的未知结构的JSON数据的结果。
JSON包采用map[string]interface{}和interface{}结构来存储任意的JSON对象和数组。
Go语言类型和JSON类型存在映射关系如下:
- bool<->JSONbooleans
- float64<->JSON numbers
- string<-> JSON strings
- nil<->JSON null
下面的代码中使用Bitly公司开源的simplejson包,在处理未知结构体JSON比官方包更方便。
三方包安装
方式1 gopath下安装,对应的src中可以引用
运行以下指令即可
go get github/bitly/go-simplejson## 如果返回以下错误,应该是国内无法访问 golang。go get: module github/bitly/go-simplejson: Get "/bitly/go-simplejson/@v/list": dial tcp 172.217.163.49:443: connectex: A conne
ction attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed
to respond.
使用国内七牛云的 go module 镜像。
go env -w GO111MODULE=on
go env -w GOPROXY=,directgo get github/bitly/go-simplejson
接下来的步骤请看:
go项目版本管理-引入第三方包_风间净琉璃的博客-CSDN博客
解析代码
package mainimport ("fmt""github/bitly/go-simplejson"
)func main() {fmt.Println("dd")json, err := simplejson.NewJson([]byte(`{"test":{"array" :[1,"2",3],"int": 10,"float":5.150,"bignum":9223372036854775807,"string":"simplejson","bool":true}}`))array, err := json.Get("test").Get("array").Array()i, err := json.Get("test").Get("int").Int()mustString := json.Get("test").Get("string").MustString()fmt.Println(array)fmt.Println(err)fmt.Println(i)fmt.Println(mustString)}
解析结果
2 保存JSON文件
2.1 保存代码
package mainimport ("encoding/json""fmt""os"
)type Server struct {ServerName stringServerIP string
}type Serverslice struct {Servers []Server
}func main() {var s Serverslices.Servers = append(s.Servers, Server{ServerName: "Local_Web", ServerIP: "127.0.0.1"})s.Servers = append(s.Servers, Server{ServerName: "Local_Db", ServerIP: "127.0.0.1"})marshal, err := json.Marshal(s)if err != nil {fmt.Println("json error:", err)return}create, err := os.Create("server.json")if err != nil {fmt.Println("cretre error", err)return}_, err = create.Write(marshal)if err != nil {fmt.Println("write error", err)return}// 用后关闭defer create.Close()fmt.Println(string(marshal))}
2.2 输出结果
可以根据保存文件到指定的路径。
更多推荐
Golang解析并保存Json
发布评论