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



猜你喜欢

转载自blog.csdn.net/daiqinge/article/details/80080570