golang 編碼JSON 輸出資料到json檔案,縮排格式
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) }