在Golang做json unmarshal的空领域

ani*_*tar 2 json struct go unmarshalling

我写了这段代码.当我运行它时,我无法弄清楚为什么它会给空字段.我试过大写变量.仍然无法正常工作.

package main

import (
        "encoding/json"
        "fmt"
)

type FirstName struct {
        Name1 string
}
type SecondName struct {
        Name2 string
}
type Person struct {
        Details     FirstName
        MoreDetails SecondName
}

func main() {
        var someGuy Person
        var data = []byte(`{"details": {"firstName": "alan"}, "moreDetails": {"surName": "Turing"}}`)
        json.Unmarshal(data, &someGuy)
        fmt.Println(someGuy)
}
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 6

您的JSON to Go映射不正确.要在解组过程中在结构字段和JSON属性之间进行自动匹配,字段名称(而不是其类型的名称)必须与JSON中的属性匹配(在非敏感的情况下):

type FirstName struct {
    FirstName string
}
type SecondName struct {
    SurName string
}
type Person struct {
    Details     FirstName
    MoreDetails SecondName
}
Run Code Online (Sandbox Code Playgroud)

有了它,输出是(在Go Playground上试试):

{{alan} {Turing}}
Run Code Online (Sandbox Code Playgroud)

如果要将这些名称保留在Go中,另一个选项是提供Go结构字段和JSON属性名称之间的映射.为此,您可以使用struct标签:

type FirstName struct {
    Name1 string `json:"firstName"`
}
type SecondName struct {
    Name2 string `json:"surName"`
}
Run Code Online (Sandbox Code Playgroud)

输出将是相同的.在Go Playground尝试这个.

有关struct标签的介绍和更多详细信息,请参阅Go中标签的用途有哪些?