import ( "encoding/json" )
2. 编码JSON,输出数据到json文件,有方法如下:
json.Marshal(xxx) 和 json.MarshalIndent(c, "", " ") ,两个方法的区别是,MarshalIndent(c, "", " ")方法按照json格式 缩进,也就是美化了的 可读性很高的 带缩进的 Json数据。所以只要是json格式数据,当然用第二个方法啦。
3. 具体代码如下:
c := make(map[string]interface{})
c["name"] = "Gopher"
c["title"] = "programmer"
c["contact"] = map[string]interface{}{
"home": "415.333.3333",
"cell": "415.555.5555",
}
// 将这个映射序列化到JSON 字符串
data, err := json.MarshalIndent(c, "", " ") //这里返回的data值,类型是[]byte
if err != nil {
log.Println("ERROR:", err)
}
fmt.Println(string(data))
然后调用 我自己写的WriteConfig(cfg string, jsonByte []byte)方法,写入到文件
WriteConfig(xxxx, data) //这里的xxx是你自己需要写入的文件路径,比如我的是当前路径下的host文件,这里就是xxxx 就是 "./host.json"
WriteConfig(cfg string, jsonByte []byte)方法代码如下:
func WriteConfig(cfg string, jsonByte []byte) { //这里的cfg就是我要写到的目标文件 ./host.json
if cfg == "" {
log.Fatalln("use -c to specify configuration file")
}
_, err := file.WriteBytes(cfg,jsonByte)
if err != nil {
log.Fatalln("write config file:", cfg, "fail:", err)
}
lock.Lock()
defer lock.Unlock()
log.Println("write config file:", cfg, "successfully")
}
以上方法中的file.WriteBytes实现如下,也可以自己下载toolkit这个包(下载地址为 github.com/toolkits),以下代码就不用写了,直接调用toolkit里现成的方法。
package file
import ( "os" "path" ) func WriteBytes(filePath string, b []byte) (int, error) { os.MkdirAll(path.Dir(filePath), os.ModePerm) fw, err := os.Create(filePath) if err != nil { return 0, err } defer fw.Close() return fw.Write(b) }