Golang解析并保存Json

Golang解析并保存Json,第1张

目录

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<->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 输出结果

可以根据保存文件到指定的路径。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/989656.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存