Golang解析并保存Json

编程入门 行业动态 更新时间:2024-10-21 16:04:54

Golang解析<a href=https://www.elefans.com/category/jswz/34/1767005.html style=并保存Json"/>

Golang解析并保存Json

目录

1 解析json

1.1 解析到结构体

解析代码

解析结果

1.2 解析到接口

三方包安装

解析代码

解析结果

2 保存JSON文件

保存代码

输出结果


1 解析json

解析JSON有两种方式:

  1. 解析到结构体,适用于知晓被解析的JSON数据的结构的方案。
  2. 解析到接口,适用于不知道被解析的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

本文发布于:2024-02-10 18:59:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1676816.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:并保存   Golang   Json

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!