在Golang中将Struct转换为JSON

Ric*_*son 1 struct go

这是Golang的新手,我正在尝试获取一种结构,以将其转换为我的其他应用程序之一将使用的JSON对象。

预期的响应将类似于以下内容...

"access": {
      "STOCK": "1",
      "FOREX": "1",
      "WEBFOREX": "1",
      "WEBSTOCK": "1"
    },
"subscription_group_dates": {
      "32": {
            "START_DATE": 1464753600,
            "END_DATE": 1472616000
            },
      "42": {
            "START_DATE": 1470024000,
            "END_DATE": 1472616000
          }
    }
Run Code Online (Sandbox Code Playgroud)

我已经在对象的“访问”部分中显示了我知道的工作部分。为了简洁起见,其他所有内容均被省略。对我而言,最困难的部分是处理golang中结构的嵌套性质...我认为以下结构可以工作,但我不确定语法。

在SubscriptionGroupDates类型下,我可以使用map [string] struct并将其余部分嵌入如图所示吗?见下文

type UCSUserAccess struct {
    Groups          map[string]string           `json:"groups"`
    Access          map[string]string           `json:"access"`
    IsExpert        string                      `json:"isExpert"`
    SubscriptionGroupDates map[string]struct {
        GroupID struct {
            StartDate map[string]int `START_DATE`
            EndDate   map[string]int `END_DATE`
            }
    } `json:"subscription_group_dates"`
}
Run Code Online (Sandbox Code Playgroud)

另外...我已经在导入部分中导入了“时间”库。我将如何使用它来将日期声明为时间对象?(而不是map [string] int)

谢谢

Kae*_*dys 5

您的结构有些复杂。具体来说,SubscriptionGroupDates是字符串到结构的映射,结构本身是字符串到int的映射,或者是具有两个int字段的静态结构。您嵌套了第二个结构,当日期应为整数时,将日期指定为地图:

type UCSUserAccess struct {
    Groups                 map[string]string  `json:"groups"`
    Access                 map[string]string  `json:"access"`
    IsExpert               string             `json:"isExpert"`
    SubscriptionGroupDates map[string]GroupID `json:"subscription_group_dates"`
}

type GroupID struct {
    StartDate int `json:"START_DATE"`
    EndDate   int `json:"END_DATE"`
}
Run Code Online (Sandbox Code Playgroud)

这提供了您所期望的JSON。示例:https : //play.golang.org/p/rGm7zKJypk(通过jsonlint.com运行输出以验证其是否符合您的要求)。

至于时间戳,您在JSON中的时间戳将存储为Unix时间戳。为了使它们进入time.Time,您需要在解组之后或通过json.Unmarshaller在自定义时间类型上实现接口来自己解析它们。有关此操作的详细信息,请参见此答案