package main
import (
"encoding/json"
"fmt"
)
type A struct {
a int `json:"a"`
}
type B struct {
b int `json:"b"`
a []A `json:"a"`
}
func main() {
var a A
var b B
a.a = 1
b.b = 2
//b.a = make([]A, 2)
b.a = append(b.a, A{2})
b.a = append(b.a, A{3})
s1, err := json.Marshal(&a)
if err != nil {
fmt.Println(err)
} else {
fmt.Println("1", a)
fmt.Println("1", string(s1))
}
s2, _ := json.Marshal(b)
fmt.Println("2", b)
fmt.Println("2", string(s2))
}
得到的结果是:
1 {1}
1 {}
2 {2 [{2} {3}]}
2 {}
为何 json.Marshal 后是空啊
1
zwpaper 2017-10-10 23:14:56 +08:00 via iPhone 1
为什么你们都喜欢把 error 忽略了,然后问为什么会出问题?
|
2
zwpaper 2017-10-10 23:16:39 +08:00 via iPhone 1
这个问题是因为 struct 里要 json 化的变量需要大写
|
3
lizon 2017-10-10 23:19:51 +08:00 1
导出变量才会被序列化
首字母大写的变量是导出变量 |
4
Sapp 2017-10-10 23:52:59 +08:00 via Android 1
记住了,不大写是无法外部使用的。
|
6
clker OP 谢谢各位大大,首字母大写。记住了。
|
8
zdt3476 2017-10-11 09:17:15 +08:00 1
话说相对于可导出这个问题来说,check error 才是关键吧
|
9
zwpaper 2017-10-11 09:57:58 +08:00 via iPhone 1
@clker 就像大家说的,首字母没大写这个问题还好,你能发现,忽略 error 的话,跑着跑着莫名 panic 了,估计你就蒙了
|
10
HarrisonZ 2017-10-11 10:31:49 +08:00
还是先把官网的教程认真看一遍吧
|
11
clker OP 非常感谢各位!
|
12
HMSQQbA 2017-10-11 21:14:26 +08:00
请教一下代码怎么贴出来的?我用 gist 法无法做到,只能显示一个按钮。
|
15
jpuyy 2017-10-24 10:03:26 +08:00
1 楼是正解
|
16
YakuMioto 2017-10-24 17:28:59 +08:00
你们好好看看代码, 人家怎么没有 check error 了? 小写不导出会报错么? ... 真的是服气 说 1L 正解的人....
|