【问题标题】:How to map or make struct for variable json response in golang? [duplicate]如何在golang中为变量json响应映射或制作结构? [复制]
【发布时间】:2021-05-15 18:19:42
【问题描述】:

我正在调用 API 并获取 json,但不知道如何为响应创建结构我使用 JSON-to-GO 来获取响应的结构。但问题是每次的反应都不一样。 例如,我有一个使用 JSON-to-GO 的结构:-

type Autogenerated struct {
    Response struct {
        Results struct {
            Status      string `json:"status"`
            StatusCode  int    `json:"status_code"`
            ResultsData struct {
                ResultsCount       int `json:"results_count"`
                NearbyCount int `json:"nearby_count"`
            } `json:"results_data"`
            SortData struct {
                SortBy string `json:"sort_by"`
            } `json:"sort_data"`
            ResponseData struct {
                Data0 struct {
                    Name string `json:"name"`
                } `json:"data_0"`
                Data1 struct {
                    Name string `json:"name"`
                } `json:"data_1"`
            } `json:"response_data"`
            Time float64 `json:"time"`
        } `json:"results"`
    } `json:"response"`
}

Data1 和 Data0 可以更像 Data2, Data3.... 并且我想要 Data0, Data1 .... 内的 Name 我对 golang 很陌生,也许我们可以使用 Map,但由于一直不一样,我不知道该怎么做。还有很多与 Name 一起提交的文件,我没有在此处粘贴以保持问题清晰。

【问题讨论】:

  • 对该部分使用地图。
  • 你的意思是说我可以在 ResponseData 之前保持相同的结构,并且在其中我可以使用 Map?一个小插图会很有帮助。
  • 是的,例如,您应该将ResponseData struct { ... } 替换为ResponseData map[string]interface{}
  • 或者map[string]struct { ... }

标签: json api go struct


【解决方案1】:

使用map[string]interface{} 作为响应数据类型。 Data0 到任意数字 os Data0 类型字段解组以映射为键 data_0, data_1, data_2

ResponseData map[string]interface{} `json:"response_data"`

如果您的数据作为每个 data_0 ... data_n 的相同对象,则定义如下所示的结构类型并使用该类型定义映射。

//new data type
type Data struct {
    Name string  `json:"name"`
}

//add this to your Autogenerated struct 
ResponseData map[string]Data `json:"response_data"`

或者简单地添加

ResponseData map[string]struct{
    Name string `json:"name"`
} `json:"response_data"`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    相关资源
    最近更新 更多