目录
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}
1.2 解析到接口ps:
struct中字段首字母需要大写不想解析全部json字段时,只需要定义部分字段即可
Golang语言中interface{}可以用来存储任意数据类型的对象,这种数据结构正好可以存储解析的未知结构的JSON数据的结果。
JSON包采用map[string]interface{}和interface{}结构来存储任意的JSON对象和数组。
Go语言类型和JSON类型存在映射关系如下:
bool<->JSONbooleansfloat64<->JSON numbersstring<-> JSON stringsnil<->JSON null下面的代码中使用Bitly公司开源的simplejson包,在处理未知结构体JSON比官方包更方便。
三方包安装方式1 gopath下安装,对应的src中可以引用
运行以下指令即可
go get github.com/bitly/go-simplejson
## 如果返回以下错误,应该是国内无法访问 golang.org。
go get: module github.com/bitly/go-simplejson: Get "https://proxy.golang.org/github.com/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=https://goproxy.cn,direct
go get github.com/bitly/go-simplejson
接下来的步骤请看:
go项目版本管理-引入第三方包_风间净琉璃的博客-CSDN博客
解析代码package main
import (
"fmt"
"github.com/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 main
import (
"encoding/json"
"fmt"
"os"
)
type Server struct {
ServerName string
ServerIP string
}
type Serverslice struct {
Servers []Server
}
func main() {
var s Serverslice
s.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 输出结果
可以根据保存文件到指定的路径。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)