Golang: JSON 小案例(读配置文件)

习惯于 xml 和 ioutil 的 []byte slice 读写,换换口味儿。(两种方式操作 JSON)

要读写一个简单的 Json 文件,这回用的是 io.Reader 对象,具体点儿说是 File 对象。

1
2
3
4
5
6
7
configFile, err := ioutil.ReadFile(filename) //slice
//json.Marshal --- slice
//json.Unmarshal --- slice

configFile, err:= os.Open(filename) // * File
jsonParser := json.NewDecoder(configFile)
err = jsonParser.Decode(&config) //store it in struct config

看到啦,其实是两种完全不同的思路。

下面进入正文:

json 配置文件:

1
2
3
4
5
6
7
8
{
"database":{
"host": "localhost",
"port": "3306"
},
"host":"localhost",
"port": "8080"
}

然后读取配置文件,其中一种写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package main

import (
_ "io/ioutil"
"os"
"fmt"
"encoding/json"
)

type Config struct {
Database struct {
Host string `json:"host"`
Port string `json:"port"`
} `json:"database"`
Host string `json:"host"`
Port string `json:"port"`
}

func LoadConfiguration(filename string) (Config, error) {
var config Config
//configFile, err := ioutil.ReadFile(filename) //slice
configFile, err:= os.Open(filename) // * File
defer configFile.Close()

if err != nil {
return config, err
}
//json.Marshal --- slice
//json.Unmarshal --- slice
jsonParser := json.NewDecoder(configFile)
err = jsonParser.Decode(&config) //store it in struct config
return config, err
}

func (config Config) String() string {
return fmt.Sprintf("Config{database{host:%s, port:%s}, host:%s, port:%s}",
config.Database.Host, config.Database.Port, config.Host, config.Port)
}

func main() {
fmt.Println("starting the application...")
if config, err := LoadConfiguration("config.json"); err != nil {
fmt.Println(err);
os.Exit(1)
} else {
fmt.Printf("%v\n", config)
}
}

运行结果:

1
2
3
json_config git:(master) ✗ go run main.go
starting the application...
Config{database{host:localhost, port:3306}, host:localhost, port:8080}

Merlin 2018.3 玩坏的json

文章目录
|