如何使用 Golang 将数据附加到新行上的 json 文件

How to append data to a json file on new line using Golang


type dataOP struct {

    Opcode_name string `json:"opcode_name"`
    ExeTime     int    `json:"exeTime"`
}

func main() {

    book := dataOP{Opcode_name: "ADD", ExeTime: 5}
    byteArray, err := json.Marshal(book)
    if err != nil {
        fmt.Println(err)
    }

    f, err := os.OpenFile("./data.json", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
    if err != nil {
        fmt.Println(err)
        return
    }

    n, err := io.WriteString(f, string(byteArray))
    if err != nil {
        fmt.Println(n, err)
    }

}

我想使用 Golang 将数据附加到新行上的 json 文件。上面的代码将json对象一个接一个的附加上去,比如

{"opcode_name":"ADD","exeTime":5}{"opcode_name":"ADD","exeTime":5}{"opcode_name":"ADD","exeTime":5}

但我想在新行中附加这些 json 个对象(json 个对象由新行分隔)。

{"opcode_name":"ADD","exeTime":5}
{"opcode_name":"ADD","exeTime":5}
{"opcode_name":"ADD","exeTime":5}

如果您希望每个 JSON 对象都在一个新行开始,只需在每个对象后写一个换行符即可。

还要注意,os.File has a File.Write()方法写了一个[]byte,所以不用转成string

另外别忘了关闭文件,最好是deferred:

f, err := os.OpenFile("./data.json", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
    fmt.Println(err)
    return
}
defer f.Close()

n, err := f.Write(byteArray)
if err != nil {
    fmt.Println(n, err)
}

if n, err = f.WriteString("\n"); err != nil {
    fmt.Println(n, err)
}

另请注意,您可以像这样通过一次调用来编写字节切片和换行符:

if _, err := fmt.Fprintf(f, "%s\n", byteArray); err != nil {
    fmt.Println(err)
}