英文:
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
}
_, err = f.WriteString(string(byteArray) + "\n")
if err != nil {
fmt.Println(err)
}
err = f.Close()
if err != nil {
fmt.Println(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}
{"opcode_name":"ADD","exeTime":5}
英文:
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)
}
}
I want to append data to a json file on new line using Golang. The above code appends the json object one after another, something like
{"opcode_name":"ADD","exeTime":5}{"opcode_name":"ADD","exeTime":5}{"opcode_name":"ADD","exeTime":5}
but i want to append these json objects in new line(json objects separated by new line).
{"opcode_name":"ADD","exeTime":5}
{"opcode_name":"ADD","exeTime":5}
{"opcode_name":"ADD","exeTime":5}
答案1
得分: 3
如果你想让每个JSON对象都从新的一行开始,只需在每个对象后面写一个换行符。
另外请注意,os.File
有一个File.Write()
方法可以直接写入[]byte
,所以不需要将其转换为string
。
还要记得关闭文件,最好使用延迟关闭:
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)
}
英文:
If you want each JSON object to start on a new line, simple write a newline after each object.
Also note that os.File
has a File.Write()
method to write a []byte
, so no need to convert it to string
.
Also don't forget to close the file, preferably 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)
}
Also note that you could write the byte slice and a newline with a single call like this:
if _, err := fmt.Fprintf(f, "%s\n", byteArray); err != nil {
fmt.Println(err)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论