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)
}