首页 > 解决方案 > 在 Go 中将嵌套的 JSON 解组为平面结构

问题描述

假设我定义一个结构如下:

type User struct {
    ID          string
    Name        string
    Age         uint
    City        string      `json:"address.city"`
    Province    string      `json:"address.province"`
}

我可以采用一个用户结构,并将扁平化的恶魔扩展成一个嵌套的 JSON 结构,并带有一个地址对象。然而,我正在努力朝着另一个方向前进。

我将如何采用以下 JSON:

{
    "ID": "1",
    "Name": "Keith Baldwin",
    "Age": 30,
    "address": {
        "city": "Saskatoon",
        "province": "Saskatchewan"
    }
}

并将其解组到给定的结构中?

有什么我遗漏的东西,还是我只需要从头开始写,可能使用反射?

谢谢

标签: jsongomarshallingunmarshalling

解决方案


创建用户信息类

type UserInfo struct {
    ID      string `json:"ID"`
    Name    string `json:"Name"`
    Age     int    `json:"Age"`
    Address struct {
        City     string `json:"city"`
        Province string `json:"province"`
    } `json:"address"`
}

然后将您的 json 数据解组为 userinfo 对象

var userInfo UserInfo
    jsonStr := `{
    "ID": "1",
    "Name": "Keith Baldwin",
    "Age": 30,
    "address": {
        "city": "Saskatoon",
        "province": "Saskatchewan"
    }
}`
json.Unmarshal([]byte(jsonStr), &userInfo)

推荐阅读