在 Go 中写一个 JSON 的不同类型(int 和 string)

Writing a JSON of different types in Go (int and string)

我是 Go 和 Json 的新手,所以我可能会错过很多要点。

所以我基本上想做的是制作一个程序来执行简单的 Fizz-Buzz program 并从中制作 JSON。 这个程序取两个整数(ab),从a迭代到 b (i) 并输出:

使用这个简单的代码片段:

func fizzbuzz(a int, b int) string{
    str := fmt.Sprint("{\"output\":[")
    for i := a ; i <= b; i++ {
        if i%5 == 0 && i%3 == 0 {str = fmt.Sprint(str, "\"FizzBuzz\"")
        }else if i%3 == 0 {str = fmt.Sprint(str, "\"Fizz\"")
        }else if i%5 == 0 {str = fmt.Sprint(str, "\"Buzz\"")
        }else {str = fmt.Sprint(str, i)}
        str = str + ","
    }
    str = str[:len(str) - 1]
    str = str + "]}"
    return str
}

我能够构建稍后可以转换为 JSON:

的字符串
{"output":["FizzBuzz",1,2,"Fizz",4,"Buzz","Fizz",7,8,"Fizz","Buzz",11,"Fizz",13,14,"FizzBuzz"]}

到目前为止一切正常。我只是想知道,是否有任何其他解决方案可以在 Golang 上制作混合类型(整数和字符串)的 JSON 数组?我试过 struct 和 marshaling,但是 struct 似乎有固定的结构。

我想到了两个不错的选择。

您可以使用接口类型。

package main

import (
    "encoding/json"
    "os"
)

type output struct {
    Output []interface{} `json:"output"`
}

func main() {
    out := output{
        Output: []interface{}{"FizzBuzz", 1, 2, "Fizz"},
    }
    d, _ := json.Marshal(out)
    os.Stdout.Write(d)
}

输出:

{"output":["FizzBuzz",1,2,"Fizz"]}

或者您可以使用不同的 JSON 库,例如 gojay,它有不同的 API 用于序列化 JSON。