亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號