习惯于 xml 和 ioutil 的 []byte slice 读写,换换口味儿。(两种方式操作 JSON)
要读写一个简单的 Json 文件,这回用的是 io.Reader 对象,具体点儿说是 File 对象。
1 2 3 4 5 6 7
| configFile, err := ioutil.ReadFile(filename)
configFile, err:= os.Open(filename) jsonParser := json.NewDecoder(configFile) err = jsonParser.Decode(&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:= os.Open(filename) defer configFile.Close()
if err != nil { return config, err } jsonParser := json.NewDecoder(configFile) err = jsonParser.Decode(&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