如何以 json 格式将字符串数组传递给请求正文 [put request]

how to pass a array of strings to request body [put request] in json format

var tagsInput string

tagsInput = inputLine("Project tags [domain/topics etc, seprated by commas in input] :\n")

tags := strings.Split(tagsInput, ",")
parseTags, _ := json.Marshal(tags)
fmt.Println(tags)
fmt.Println(string(parseTags))
postBody, _ := json.Marshal(map[string]string{
    "name":   name,
    "desc":   desc,
    "status": status,
    "tags":   string(parseTags),
})

我需要一个数组作为像 ["golang"] 这样的标签 但它是一个字符串 .

您当前正在尝试 json 编组字符串映射 map[string]string。你想为 tags 字段做的是整理一个字符串数组 []string.

您问题的答案是仅编组 tags 变量一次。快速的解决方案是使您的地图成为 interface{} 类型的地图。它允许您在地图中存储任意类型,这些类型将被正确 json 编组:

https://play.golang.org/p/7D-wy7rQ8o_6

    input := "golang, elixir, python, java"
    tags := strings.Split(input, ",")
    
    postBody, _ := json.Marshal(map[string]interface{}{
        "name":   name,
        "desc":   desc,
        "status": status,
        "tags":   tags,
    })

缺点是你失去了类型安全。现在每个字段都可以是任何东西。更好的方法是为这个请求创建一个数据结构:

https://play.golang.org/p/wTbrXH0HXoG

type Request struct {
    Name        string   `json:"name"`
    Description string   `json:"description"`
    Status      string   `json:"status"`
    Tags        []string `json:"tags"`
}

input := "golang, elixir, python, java"
tags := strings.Split(input, ",")

postBody, _ := json.Marshal(Request{
    Name:        name,
    Description: desc,
    Status:      status,
    Tags:        tags,
})