处理 JSON API 响应

在处理我的第一个 Go 项目时,我在思考一些复杂的数据结构时遇到了一些麻烦。目前,我正在模拟来自 API的响应,该 API 将返回一个包含 2 个属性的 JSON 对象:


columns 包含按应处理顺序排列的字段数组

data 包含一个对象数组,其中包含列在中的属性 columns

我需要迭代data数组/切片,并在其中迭代columns数组/切片并从当前数据对象中提取当前属性。我没有正确处理数据结构。大量的试验和错误让我留下了以下代码和足够的挫败感,决定我只需要提出这个问题。


res, err := http.Get("http://roadmap-proto.robwilkerson.org/demo.json")

failOnError(err, "Uh oh")

defer res.Body.Close()


// Decode and process the JSON response

// var v map[string]interface{}

type View struct {

    Columns []string               `"json:columns"`

    Data    map[string]interface{} `"json:data"`

}

v := View{}

json.NewDecoder(res.Body).Decode(&v)

log.Printf("[====>] Data: %s", v)

的输出log.Printf()是这样的:


Data: {[id avatar name email phone address] map[]}

在columns似乎看还好,而不是数据。最终我需要遍历它并将每个字段写入 Excel 单元格,但到目前为止我什至无法正确“加载”数据。


任何朝着正确方向的推动将不胜感激。


更新


我无意中遗漏了一些关键信息:在对 API 的任何给定调用中,列的数量和名称可能不同。在给定的调用中,data数组中的所有对象都相同,但每次调用都可能非常非常不同。我无法定义静态struct并进行这项工作。


白衣染霜花
浏览 217回答 1
1回答

郎朗坤

我会为此使用两个结构:type ColData struct {    Id      string `json:"id"`    Avatar  string `json:"avatar"`    Name    string `json:"name"`    Email   string `json:"email"`    Phone   string `json:"phone"`    Address string `json:"address"`}type View struct {    Columns []string  `json:"columns"`    Data    []ColData `json:"data"`}回应您的更新:type View struct {    Columns []string               `"json:columns"`    Data    map[string]interface{} `"json:data"`}只需要成为type View struct {    Columns []string               `"json:columns"`    Data    []map[string]interface{} `"json:data"`}将您的数据放入结构中。与他们一起工作string或json.RawMessage代替他们工作也可能很好interface{},但我真的不知道你在用它做什么/你可能会得到什么。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go