json.Marshal(struct) 返回“{}”
技术问答
237 人阅读
|
0 人回复
|
2023-09-12
|
err := json.Marshal(testObject) if err != nil fmt.Println(err) } fmt.Println(string(b[]code]err := json.Marshal(testObject) if err != nil { fmt.Println(err) } fmt.Println(string(b[:]))}[/code]这是输出:9 J* U/ F0 ]1 [ _' y. y2 r9 n
[ `go test -test.run="^TestCreateSingleItemResponse$"` | done: 2.195666095s {TestObject f73h5jf8 Yuri Gagarin Yuri.Gagarin@Vostok.com} PASS8 A1 _ q( i* e; P# {% U0 i
为什么 JSON 本质上是空的?8 n) x( u; J5 v
$ g3 \6 N5 M: r% T( I
解决方案:
7 k- x Z% R: Q5 K% } 您需要导出字段名称中的第一个字母TestObject 中的字段kind为Kind等等。
) O7 Z0 w8 [4 u* f# b4 w2 R ?: Gtype TestObject struct { Kind string `json:"kind"` Id string `json:"id,omitempty"` Name string `json:"name"` Email string `json:"email"`}" l4 q7 U! ?; k% }
encoding/json 包和类似的包会忽略未导出的字段。
9 _+ L, x$ l4 Gjson:"..."字段声明后面的字符串是struct tags。在与 JSON 封装时,结构字段的名称设置在结构中。 |
|
|
|
|
|