在 Go 中写一个 JSON 的不同类型(int 和 string)
Writing a JSON of different types in Go (int and string)
我是 Go 和 Json 的新手,所以我可能会错过很多要点。
所以我基本上想做的是制作一个程序来执行简单的 Fizz-Buzz program 并从中制作 JSON。
这个程序取两个整数(a和b),从a迭代到 b (i) 并输出:
- 如果数字是 3 的因数,则为“Fizz”
- 如果数字是 5 的因数,则为“嗡嗡声”
- "FizzBuzz" 如果数字是两者的一个因素,
- 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。
我是 Go 和 Json 的新手,所以我可能会错过很多要点。
所以我基本上想做的是制作一个程序来执行简单的 Fizz-Buzz program 并从中制作 JSON。 这个程序取两个整数(a和b),从a迭代到 b (i) 并输出:
- 如果数字是 3 的因数,则为“Fizz”
- 如果数字是 5 的因数,则为“嗡嗡声”
- "FizzBuzz" 如果数字是两者的一个因素,
- 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。