将json对象写入文件

将json对象写入文件,json,go,io,Json,Go,Io,有这样一种将json对象写入文件的工作流: for { Step 1. create json object Step 2. Save object to file } 所以我写了这样的代码 f, _ := os.Create("output.json") defer f.Close() a1 := A{Name:"John", Surname:"Black"} a2 := A{Name:"Mary", Surname:"Brown"} a1_json, _ := json.

有这样一种将json对象写入文件的工作流:

for {
    Step 1. create json object
    Step 2. Save object to file
}
所以我写了这样的代码

f, _ := os.Create("output.json")
defer f.Close()
a1 := A{Name:"John", Surname:"Black"}
a2 := A{Name:"Mary", Surname:"Brown"}

a1_json, _ := json.MarshalIndent(a1, "", "\t")
a2_json, _ := json.MarshalIndent(a2, "", "\t")
f.Write(a1_json)
f.Write(a2_json)
因此,我:

{
    "Name": "John",
    "Surname": "Black"
}{
    "Name": "Mary",
    "Surname": "Brown"
}
这不是正确的json文件,因为它没有像下面这样的大括号和逗号:

[
  {
    "Name": "John",
    "Surname": "Black"
  },
  {
    "Name": "Mary",
    "Surname": "Brown"
  }
]

如何以适当的方式写入文件?

只需对结构进行切片并保存即可。这将创建JSON数组

f, _ := os.Create("output.json")
defer f.Close()
as := []A{
    {Name:"John", Surname:"Black"},
    {Name:"Mary", Surname:"Brown"},
}
as_json, _ := json.MarshalIndent(as, "", "\t")
f.Write(as_json)
如果确实需要,可以手动分离元素

f, _ := os.Create("output.json")
defer f.Close()
a1 := A{Name:"John", Surname:"Black"}
a2 := A{Name:"Mary", Surname:"Brown"}

f.Write([]byte("[\n"))
a1_json, _ := json.MarshalIndent(a1, "", "\t")
f.Write([]byte(",\n"))
a2_json, _ := json.MarshalIndent(a2, "", "\t")
f.Write([]byte("]\n"))

f.Write(a1_json)
f.Write(a2_json)

你也可以考虑使用它来实现你的目标,但是语法略有不同。

只需制作一段结构并保存它。这将创建JSON数组

f, _ := os.Create("output.json")
defer f.Close()
as := []A{
    {Name:"John", Surname:"Black"},
    {Name:"Mary", Surname:"Brown"},
}
as_json, _ := json.MarshalIndent(as, "", "\t")
f.Write(as_json)
如果确实需要,可以手动分离元素

f, _ := os.Create("output.json")
defer f.Close()
a1 := A{Name:"John", Surname:"Black"}
a2 := A{Name:"Mary", Surname:"Brown"}

f.Write([]byte("[\n"))
a1_json, _ := json.MarshalIndent(a1, "", "\t")
f.Write([]byte(",\n"))
a2_json, _ := json.MarshalIndent(a2, "", "\t")
f.Write([]byte("]\n"))

f.Write(a1_json)
f.Write(a2_json)

你也可以考虑使用它来实现你的目标,但是语法略有不同。

将这些结构放到一个切片中,而MaSURL代替该片

f, err := os.Create("output.json")
if err != nil{
   panic(err)
}
defer f.Close()
a1 := A{Name:"John", Surname:"Black"}
a2 := A{Name:"Mary", Surname:"Brown"}

a := []A{a1, a2}
a_json, err := json.MarshalIndent(a, "", "\t")
if err != nil{
   panic(err)
}
f.Write(a_json)

此外,在可能的情况下,始终检查是否存在错误

将这些结构放入一个切片中,并对切片进行马歇尔处理

f, err := os.Create("output.json")
if err != nil{
   panic(err)
}
defer f.Close()
a1 := A{Name:"John", Surname:"Black"}
a2 := A{Name:"Mary", Surname:"Brown"}

a := []A{a1, a2}
a_json, err := json.MarshalIndent(a, "", "\t")
if err != nil{
   panic(err)
}
f.Write(a_json)

此外,如果可能,请始终检查err(错误)

它会破坏工作流,因为我希望获取一个json对象,然后将其存储到循环中的文件中。如果是这种情况,则需要将每个对象写入不同的文件这是使用Go json库的正确方法。如果需要,您可以自己将括号和逗号添加到流中,但风险自负。这并不难,但它经不起代码审查。@RomaKarageorgievich我添加了一个not on JSON流,您可能会发现它很有用。它会破坏工作流,因为我想获取一个JSON对象,然后将其存储到循环中的文件中。如果是这样,您需要在不同的文件中编写每个文件。这是使用Go的JSON库的正确方法。如果需要,您可以自己将括号和逗号添加到流中,但风险自负。做这件事并不难,但经不起代码审查。@RomaKarageorgievich我添加了一个not on JSON流,你可能会发现它很有用。@Volker也许有一些go库可以处理这种情况?那么寻找这种情况的错误地方也是如此。但老实说:向文件中写入,并不需要专用的包。导入这样的内容所需的开销比仅仅编写代码要大,@Volker也许有一些go库可以处理这样的情况?那么,寻找这样的情况的错误地方也是如此。但老实说:向文件中写入,并不需要专用的包。导入类似这样的内容的开销比只编写,。