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

package main


import (

    "encoding/json"

    "fmt"

)


type InnerData struct {

    M int64 `josn:"m"`

    N int64 `json:"n"`

}


//JSONData is a json data example

type 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}}

有谁知道如何解决这个问题,或者我哪里错了?


繁星点点滴滴
浏览 133回答 2
2回答

忽然笑

标记声明中拼写为jsonas的愚蠢错误josntype 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}

慕的地8271018

您的代码中有拼写错误:在你的InnerData,你把josn而不是json。修正这些拼写错误,然后重试。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go