在go语言的日常使用中,我们总需要解析一些json配置文件,今天介绍一种使用库函数中Decode方法对json文件进行解析的方法。
type Decoder
type Decoder struct {
// 内含隐藏或非导出字段
}
Decoder从输入流解码json对象
.json文件
//config.json
{
"blue": "greenBlue",
"one": 1,
"right": true
}
一、首先创建字段跟json配置文件中相匹配的结构体
type Config struct {
// 注意要有 json 标签,并且标签 json 冒号后面没有空格,且字段首字母大写
Blue string `json:"blue"`
One int `json:"one"`
Right bool `json:"right"`
}
//创建Config类型的变量
var cfg Config
二、使用os包中的Open方法读取.json文件
f, err := os.Open("config.json")
if err != nil {
return err
}
//方法结束,Close关闭文件f,使文件不能用于读写。
defer f.Close()
func Open(name string) (file *File, err error)
Open打开一个文件用于读取,如果操作成功,返回的对象方法用于读取数据。如果操作失败,则返回错误,错误底层类型是*PathError。
三、使用encoding包中的NewDecoder方法创建一个Decoder解码器
f, err := os.Open("config.json")
if err != nil {
return err
}
//方法结束,Close关闭文件f,使文件不能用于读写。
defer f.Close()
decoder := json.NewDecoder(f)
func NewDecoder(r io.Reader) *Decoder
NewDecoder方法创建一个从r中读取并解码json对象的*Deconder解码器,解码器有自己的缓冲,并可能超前读取部分json数据。
四、使用Decode方法读取并保存
f, err := os.Open("config.json")
if err != nil {
return err
}
//方法结束,Close关闭文件f,使文件不能用于读写。
defer f.Close()
decoder := json.NewDecoder(f)
//读取decoder中解析的json值并保存在cfg实例的结构体中
err = decoder.Decode(&cfg)
if err != nil {
return err
}
fmt.Print(cfg)
func (dec *Decoder) Decode(v interface{}) error
Decode从输入流读取下一个json编码值并保存在v指向的值里
输出结果为:
{greenBlue 1 true}