为了账号安全,请及时绑定邮箱和手机立即绑定

golang json 无法正确解析带有嵌入式结构标签的字段

golang json 无法正确解析带有嵌入式结构标签的字段

Go
繁星点点滴滴 2023-03-21 17:35:19
package mainimport (    "encoding/json"    "fmt")type InnerData struct {    M int64 `josn:"m"`    N int64 `json:"n"`}//JSONData is a json data exampletype JSONData struct {    Hello string    `json:"hello"`    Data  InnerData `json:"data"`}func main() {    v := JSONData{Hello: "world", Data: InnerData{N: 100000, M: 123456}}    mashaled, err := json.Marshal(&v)    if err != nil {        fmt.Println(err)        return    }    fmt.Println(string(mashaled))}注意到 InnerData 中的字段 M 有一个标签 m,所以预期的结果是:{"hello":"world","data":{"m":123456,"n":100000}}。虽然我有{"hello":"world","data":{"M":123456,"n":100000}}有谁知道如何解决这个问题,或者我哪里错了?
查看完整描述

2 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

标记声明中拼写为jsonas的愚蠢错误josn


type InnerData struct {

    M int64 `josn:"m"` // the spelling is not correct for json.

    N int64 `json:"n"`

}

将字段 M 的标记更改为


type InnerData struct {

    M int64 `json:"m"` // the spelling is not correct for json.

    N int64 `json:"n"`

}

还有一件事是InnerData不是嵌入式结构。在 Golang 规范中,嵌入式结构被描述为:


使用类型声明但没有显式字段名称的字段称为嵌入字段。嵌入字段必须指定为类型名称 T 或指向非接口类型名称 *T 的指针,并且 T 本身可能不是指针类型。非限定类型名称充当字段名称。


// 具有四个类型为 T1、*T2、P.T3 和 *P.T4 的嵌入字段的结构


struct {

    T1        // field name is T1

    *T2       // field name is T2

    P.T3      // field name is T3

    *P.T4     // field name is T4

    x, y int  // field names are x and y

}


查看完整回答
反对 回复 2023-03-21
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

您的代码中有拼写错误:

在你的InnerData,你把josn而不是json

修正这些拼写错误,然后重试。


查看完整回答
反对 回复 2023-03-21
  • 2 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信