回答

收藏

json.Marshal(struct) 返回“{}”

技术问答 技术问答 238 人阅读 | 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]这是输出:& u' Z& x7 L! U+ Y3 T' G' ~
    [ `go test -test.run="^TestCreateSingleItemResponse$"` | done: 2.195666095s    {TestObject f73h5jf8 Yuri Gagarin Yuri.Gagarin@Vostok.com}    PASS
    ! |& m  P4 s2 l/ B/ o, U, A
为什么 JSON 本质上是空的?  @  f6 I: b; p
                                                                1 q  X2 [' b! r! `
    解决方案:                                                               
# @4 L4 u7 |  O                                                                您需要导出字段名称中的第一个字母TestObject 中的字段kind为Kind等等。
3 R0 g7 v. b# }2 L/ g8 n' ]
    type TestObject struct { Kind string `json:"kind"` Id   string `json:"id,omitempty"` Name  string `json:"name"` Email string `json:"email"`}
    % f5 i6 k, n. s6 `9 Q
encoding/json 包和类似的包会忽略未导出的字段。/ \7 @  W6 d9 t* s
json:"..."字段声明后面的字符串是struct tags。在与 JSON 封装时,结构字段的名称设置在结构中。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则