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
}
- 2 回答
- 0 关注
- 130 浏览
添加回答
举报
0/150
提交
取消