【问题标题】:How to unmarshall JSON in golang如何在 golang 中解组 JSON
【发布时间】:2020-02-04 02:13:57
【问题描述】:

我无法在我的 golang 服务中解组访问 JSON 字符串的值。

我阅读了 golang 的文档,但示例中的 JSON 对象的格式都不同。

从我的 api 我得到以下 JSON 字符串:

{"NewDepartment":
    {
    "newDepName":"Testabt",
    "newDepCompany":2,
    "newDepMail":"Bla@bla.org"
    }
}

在 go 中我定义了以下数据类型:

type NewDepartment struct {
    NewDepName string `json:"newDepName"`
    NewDepCompany   int `json:"newDepCompany"`
    NewDepMail string `json:"newDepMail"`
}

type NewDeps struct {
    NewDeps   []NewDepartment `json:"NewDepartment"`
}

我尝试解组 JSON(来自请求正文)并访问值,但我无法获得任何结果

var data types.NewDepartment
    errDec := json.Unmarshal(reqBody, &data)

fmt.Println("AddDepartment JSON string got: " + data.NewDepName)

但它不包含字符串 - 不显示任何内容,但在解组或 Println 时没有错误。

感谢您的帮助。

【问题讨论】:

  • json 中的 NewDepartment 是一个对象,而不是一个数组。所以类似地,你的 Go 代码中的 NewDeps 字段应该是一个结构,而不是一个切片。即把NewDeps []NewDepartment改成NewDeps NewDepartment。

标签: json go unmarshalling


【解决方案1】:

你快到了。

第一个更新是使 NewDeps.NewDeps 成为单个对象,而不是数组(根据提供的 JSON)。

第二个更新是将 JSON 反序列化为 NewDeps,而不是 NewDepartment。

工作代码:

type NewDepartment struct {
    NewDepName string      `json:"newDepName"`
    NewDepCompany int      `json:"newDepCompany"`
    NewDepMail string      `json:"newDepMail"`
}

type NewDeps struct {
    NewDeps NewDepartment  `json:"NewDepartment"`
}

func main() {
    var data NewDeps
    json.Unmarshal([]byte(body), &data)

    fmt.Println("AddDepartment JSON string got: " + data.NewDeps.NewDepName)
}

https://play.golang.org/p/Sn02hwETRv1

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 2021-11-04
    • 2017-09-23
    • 2017-03-20
    • 2022-01-21
    • 1970-01-01
    • 2018-04-20
    • 2017-09-07
    • 1970-01-01
    相关资源
    最近更新 更多