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"
}
config.go
package main
import (
"encoding/json"
"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
}
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
您可能感兴趣的文章:- go json数据转发的实现代码
- Golang map如何生成有序的json数据详解
- golang 实现菜单树的生成方式
- golang通过递归遍历生成树状结构的操作
- goland 恢复已更改文件的操作
- goland 清除所有的默认设置操作