1. 程式人生 > >golang 編碼JSON 輸出資料到json檔案,縮排格式

golang 編碼JSON 輸出資料到json檔案,縮排格式

1. 不管golang從json檔案讀取資料,還是寫資料到json配置檔案,都需要encoding/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)
}