猿问

Go 映射到 Json 的列表

我想以特定格式在 json 文件中解析 Go 中的地图列表。以下是我的清单:


m := []map[string]interface{}{}


k1 := map[string]interface{}{"a1": "aa1", "b1": "bb1"}

k2 := map[string]interface{}{"a2": "aa2", "b2": "bb2"}

k3 := map[string]interface{}{"a3": "aa3", "b3": "bb3"}


m = append(m, k1, k2, k3)

这就是我将其解析为 json 文件的方式。


jsonFile, _ := json.MarshalIndent(m, "", "\t")

ioutil.WriteFile("file.json", jsonFile, os.ModePerm)

在 json 文件中,我想要:

  • 开头或结尾没有[或符号。]

  • 每张地图都要换行

  • 连续地图之间没有逗号

  • 行首没有空格缩进。

这是我的 json 文件目前的样子:

[

    {

        "a1": "aa1",

        "b1": "bb1"

    },

    {

        "a2": "aa2",

        "b2": "bb2"

    },

    {

        "a3": "aa3",

        "b3": "bb3"

    }

]

以下是我希望保存的 json 文件中的输出的外观:


{

    "a1": "aa1",

    "b1": "bb1"

}

{

    "a2": "aa2",

    "b2": "bb2"

}

{

    "a3": "aa3",

    "b3": "bb3"

}

我意识到我可以将每张地图都放在新的一行中。这样就完成了。但是,在连续映射和缩进之后删除[或]符号、逗号还有待完成。我怎样才能做到这一点?


摇曳的蔷薇
浏览 114回答 1
1回答

慕容森

您想要的输出是一系列独立的 JSON 对象。使用 ajson.Encoder单独编码对象。像这样的东西:enc := json.NewEncoder(os.Stdout)enc.SetIndent("", "  ")for _, v := range m {    if err := enc.Encode(v); err != nil {        panic(err)    }}这将输出(在Go Playground上尝试):{  "a1": "aa1",  "b1": "bb1"}{  "a2": "aa2",  "b2": "bb2"}{  "a3": "aa3",  "b3": "bb3"}此示例将 JSON 文本写入标准输出。要登录到文件,显然传递一个*os.File值而不是os.Stdout.
随时随地看视频慕课网APP

相关分类

Go
我要回答