【问题标题】:Empty fields while doing json unmarshal进行 json 解组时的空字段
【发布时间】:2018-10-26 06:28:42
【问题描述】:

我已经编写了这段代码。我无法弄清楚为什么在我运行它时它会给出空字段。我试过大写变量。还是不行。

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

【问题讨论】:

    标签: json go struct unmarshalling


    【解决方案1】:

    您的 JSON to Go 映射不正确。要在解组过程中自动匹配结构字段和 JSON 属性,字段 names(而不是其类型的名称)必须与 JSON 中的属性匹配(以不区分大小写的方式) :

    type FirstName struct {
        FirstName string
    }
    type SecondName struct {
        SurName string
    }
    type Person struct {
        Details     FirstName
        MoreDetails SecondName
    }
    

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

    {{alan} {Turing}}
    

    如果您想在 Go 中保留这些名称,另一种选择是在 Go 结构字段和 JSON 属性名称之间提供 映射。为此,您可以使用struct tags:

    type FirstName struct {
        Name1 string `json:"firstName"`
    }
    type SecondName struct {
        Name2 string `json:"surName"`
    }
    

    输出将是相同的。在Go Playground 上试试这个。

    关于struct标签的介绍和详细信息,请参见What are the use(s) for tags in Go?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 2013-05-05
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多