JSON解码器无法将对象解码为对象

type MiddleMan struct {

    User CompletedByUser `json:"user"`

}

type CompletedByUser struct {

    DisplayName string `json:"displayName"`

    Id          string `json:"id"`

}

使用以下类型,我运行代码


shorterJsonString := `{

    "user":{

        "displayName":null,

        "id":"a03dfee5-a754-4eb9"

    }

 }`


if !json.Valid([]byte(shorterJsonString)) {

    log.Println("Not valid")

}

var middleMan models.MiddleMan


newReader := strings.NewReader(shorterJsonString)

json.NewDecoder(newReader).Decode(&middleMan)


log.Println(middleMan)

不幸的是,对于嵌套对象,解码器似乎被破坏了。打印出来的不是吐出实际的物体,而是打印出来


{{ a03dfee5-a754-4eb9 }}

它似乎将整个事物展平到 id 字段中。这里发生了什么?


繁星淼淼
浏览 95回答 1
1回答

白板的微信

您期望会发生什么/被打印出来?log包(使用fmt包)打印用大括号括起来的结构,列出用空格分隔的字段值。你MiddleMan有一个字段,所以它看起来像这样:{field}field另一个struct类型在哪里CompletedByUser,它有 2 个字段,所以它看起来像这样:{{field1 field2}}wherefield的string类型是空字符串,因此您会看到field2前缀为空格的值:{{ a03dfee5-a754-4eb9}}如果您打印它添加字段名称:log.Printf("%+v", middleMan)您将看到如下输出:{User:{DisplayName: Id:a03dfee5-a754-4eb9}}使用另一种(Go 语法)格式:log.Printf("%#v", middleMan)输出:main.MiddleMan{User:main.CompletedByUser{DisplayName:"", Id:"a03dfee5-a754-4eb9"}}在Go Playground上试试这个。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go