如何使用数组正确格式化 JSON

Mer*_*dil -2 arrays json http request go

我正在尝试在我的 POST 请求中发送一个 JSON 有效负载,但我不确定如何正确格式化它以使用数组。下面是正确的 JSON本身的样子:

{
    "animal": "dog",
    "contents": [{
        "name": "daisy",
        "VAL": "234.92133",
        "age": 3
    }]
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我有这个:

        group := map[string]interface{}{
            "animal": "dog",
            "contents": map[string]interface{}{
                "name": "daisy",
                "VAL":  "234.92133",
                "age":  3,
            },
        }
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何处理内容数组(方括号),只有“内容”中的大括号。

Teh*_*inX 6

快速回答:

    group := map[string]interface{}{
        "animal": "dog",
        "contents": []map[string]interface{}{
            {
                "name": "daisy",
                "VAL":  "234.92133",
                "age":  3,
            },
        },
    }
Run Code Online (Sandbox Code Playgroud)

但正如评论中已经说过的那样,使用结构更好(类型安全):

type Animal struct {
    Type     string          `json:"animal"`
    Contents []AnimalContent `json:"contents"`
}

type AnimalContent struct {
    Name  string `json:"name"`
    Value string `json:"VAL"`
    Age   int    `json:"age"`
}
Run Code Online (Sandbox Code Playgroud)

然后创建:

    group := Animal{
        Type:     "dog",
        Contents: []AnimalContent{
            {
                Name:  "daisy",
                Value: "234.92133",
                Age:   3,
            },
        },
    }

    // to transform to json format
    bts, err := json.Marshal(group)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(bts))
Run Code Online (Sandbox Code Playgroud)