用嵌套数组编组 JSON?

我想像这样创建 JSON:


{

  "name": "val1",

  "version": "val2",

  "type": "val3",

  "settings": [

    "setting1,

    "setting2",

    "setting3",

    [

      "option1",

      "option2"

    ] 

  ]

}

但我不知道如何在里面创建嵌套数组settings:


package main


import (

        "encoding/json"

        "fmt"

)


type Config struct {

        Name     string   `json:"name"`

        Version  string   `json:"version"`

        Type     string   `json:"type"`

        Settings []string `json:"settings"`

}


func main() {

        settings := []string{"setting1", "setting2", "setting3"}

        options := []string{"option1", "option2"}

        setopts := append(settings, options...)


        c := &Config{"val1", "val2", "val3", setopts}


        j, err := json.Marshal(c)

        if err != nil {

                panic(err)

        }


        fmt.Println(string(j))

}

输出通过 jq 管道传输以提高可读性:


$ ./main | jq

{

  "name": "val1",

  "version": "val2",

  "type": "val3",

  "settings": [

    "setting1",

    "setting2",

    "setting3",

    "option1",

    "option2"

  ]

}

结果是option1和option2是数组内的值settings,但它们应该在嵌套数组内settings。此外,编组时选项可能并不总是存在,在这些情况下不应创建嵌套数组。


我怎样才能做到这一点?


汪汪一只猫
浏览 71回答 1
1回答

慕盖茨4494581

您在此处显示的输出:    "setting1",    "setting2",    "setting3",    [      "option1",      "option2"    ]可以描述为 JSON 字符串或字符串数组。您可以使用 来建模,并附[]interface{}加到字符串或切片:type Config struct {        Name     string        `json:"name"`        Version  string        `json:"version"`        Type     string        `json:"type"`        Settings []interface{} `json:"settings"`}func main() {        settings := []interface{}{              "setting1",               "setting2",               "setting3",              []string{"option1", "option2"},        }        c := &Config{"val1", "val2", "val3", settings}        j, err := json.Marshal(c)        if err != nil {                panic(err)        }        fmt.Println(string(j))}游乐场:https ://go.dev/play/p/8LPAVBPmd8w
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go