go语⾔中json数据的读取和写出操作
go⾃带json库,在使⽤时需要通过 import "encoding/json"来导⼊该库。
在读取和写⼊json数据之前需要定义相关的结构体来对应被操作的json数据的格式,并且结构体中需要导出或导⼊的变量⾸字母⼤写。
其中,json.Marshal()⽤于将⼀个对象转换为json格式的字节数组,json.Unmarshal()⽤于将json格式的字节数组转换为⼀个对象。
具体使⽤⽰例如下所⽰:
⾸先,定义结构体:
type Com struct {
Name string
Nodes []string
}
读取操作(从⽂件中读取json数组到结构体数组中):
func load(fname string) {
var cs []Com = make([]Com, 0)
fp, err := os.Open(fname)
if err != nil {
panic(err)
}
defer fp.Close()
bytes, err := ioutil.ReadAll(fp)
if err != nil {
panic(err)
}
err = json.Unmarshal(bytes, &cs)
if err != nil {
panic(err)
}
//使⽤cs
...
}
写出操作(将结构体数组转换为json数组并写⼊⽂件):
func dump(fname string) {
fp, err := os.Create(fname)
if err != nil {
panic(err)
}
defer fp.Close()
cs := []Com{}
cs = append(cs, Com{"1", []string{"1.1", "2.2"}})
cs = append(cs, Com{"2", []string{"2.2", "3.2"}})
cs = append(cs, Com{"3", []string{"3.4", "4.5"}})
data, err := json.Marshal(cs)
if err != nil {
panic(err)
}
n, err := fp.Write(data)
if err != nil {
panic(err)
}
}
补充:go 读取 json 配置⽂件
引⾔
go 读取 json 配置⽂件,主要有两个知识点:⼀是⽂件的读取,⼆是 json 数据的处理。
序列化与反序列化
对 json 数据的处理往往指的是数据的序列化和反序列化。
把变量从内存中变成可存储或传输的过程称之为序列化,序列化之后,就可以把序列化后的内容写⼊到磁盘,或者通过⽹络传输到别的机器上。反过来,把变量内容从序列化的对象重新读到内存⾥称之为反序列化。
go 有内置对 json 数据的处理包 “encoding/json”。
序列化为 json 格式:
data, err := json.Marshal(infos)
反序列化 json 数据:
err := json.Unmarshal(str, &info)
⽂件读取
配置⽂件的读取
config.json
{
"userName":"root",
"password":"",
"host":"localhost",
"port":"3306",
"dbName": "test",
"tableName":"table"
}
<
package main
import (
"encoding/json"
go 字符串转数组
"fmt"
"sync"
io "io/ioutil"
)
//定义配置⽂件解析后的结构
type UserInfo struct {
UserName  string `json:userName`
Password  string `json:password`
Host      string `json:host`
Port    string `json:port`
DbName    string `json:dbName`
TableName string `json:tableName`
}
var UserIn UserInfo
var file_locker sync.Mutex //config file locker
func InitConfig() bool {
conf, bl := LoadConfig("./config.json") //get config struct
if !bl {
fmt.Println("InitConfig failed")
return false
}
UserIn = conf
return true
}
/*************************************************
Function: LoadConfig
Description: read config file to config struct
@parameter filename: config file
Return: Config,bool
*************************************************/
func LoadConfig(filename string) (UserInfo, bool) {
var conf UserInfo
file_locker.Lock()
data, err := io.ReadFile(filename) //read config file
file_locker.Unlock()
if err != nil {
fmt.Println("read json file error")
return conf, false
}
datajson := []byte(data)
err = json.Unmarshal(datajson, &conf)
if err != nil {
fmt.Println("unmarshal json file error")
return conf, false
}
return conf, true
}
func main() {
bl := InitConfig()
if !bl {
fmt.Println("init config failed")
return
}
}
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。