golang で JSON 返す API つくった時にハマったのでメモ。
現象
スライス変数の作成方法によって内容が変わる
null になる
type (
Test struct {
Tests []string `json:"tests"`
}
)
func main() {
var t Test
var tests []string
t.Tests = tests
res, _ := json.Marshal(t)
println(string(res))
}
// {"tests":null}
[] になる
type (
Test struct {
Tests []string `json:"tests"`
}
)
func main() {
var t Test
tests := make([]string, 0) // []string{} でも同じ
t.Tests = tests
res, _ := json.Marshal(t)
println(string(res))
}
// {"tests":[]}
null で返すと Swift などで使う場合 optional で受け取らないといけないので注意しましょう(自戒)