go 解析json文件

该代码段展示了如何在Go中读取名为myconfig.json的JSON配置文件,解析其内容,包括cluster_report_map和tag_report_map字段,以及tag_url。定义了Config结构体来匹配JSON对象,并使用ioutil.ReadFile读取文件,再用json.Unmarshal解码JSON数据到Config结构体中,最后通过原子操作设置全局Config对象。
摘要由CSDN通过智能技术生成

json文件myconfig.json格式

{
	"cluster_report_map": {
		"参数1": {
			"config": [
				{
					"url": "",
					"need_all": false
				}
			]
		}
	},
	"tag_report_map": {
		"参数2": {
			"config": [
				{
					"url": "",
					"need_all": false
				}
			]
		}
	},
	"tag_url": "http://xxxx"
}

解析json

import (
	"encoding/json"
	"io/ioutil"
	"sync/atomic"
)
const configPath = "myconfig/myconfig.json"
type Config struct {
	Url     string `json:"url"`
	NeedAll bool   `json:"need_all"`
}
type ReportConfig struct {
	Config []Config `json:"config"`
}
type Config struct {
	ClusterReportMap map[string]ReportConfig `json:"cluster_report_map"`
	TagReportMap     map[string]ReportConfig `json:"tag_report_map"`
	TagUrl           string                  `json:"tag_url"`
}
func init() {
	SetGlobalConfig(&Config{})
}
// gm 配置信息,启动后解析json文件并赋值
var gm = atomic.Value{}
// GlobalConfig 获取全局配置对象
func GlobalConfig() *Config {
	return gm.Load().(*Config)
}
// SetGlobalConfig 设置全局配置对象
func SetGlobalConfig(cfg *Config) {
	gm.Store(cfg)
}
func Init(configPath string) {
	buf, err := ioutil.ReadFile(configPath)
	if err != nil {
		log.Errof(err)
		return
	}
	cfg := &Config{}
	err = json.Unmarshal(buf, cfg)
	if err != nil {
		log.Errof(err)
		return
	}
	SetGlobalConfig(cfg)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值