如何在Golang中解组JSON

时间:2019-10-06 14:54:29

标签: json go unmarshalling

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

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

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

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

我定义了以下数据类型:

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时没有错误。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

你快到了。

第一个更新是使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