在Go中解组嵌套在JSON对象内的数组

时间:2018-09-27 14:10:39

标签: go

我遇到了一些问题unmarshalling,这些JSON数据到包含项目结构的Go(Golang)项目切片中:

response := {
      "data": [
        {
          "name": "a",
          "products": [
            {
              "name": "c"
            }
          ]
        },
        {
          "name": "b",
          "products": [
            {
              "name": "d"
            }
          ]
        },
        {
          "name": "c",
          "products": [
            {
              "name": "e"
            }
          ]
        }
      ]
    }

这些是我的结构:

   type Item struct {
     Name string
     Products
    }

    type Products struct {
     Name string
    }

切片基本上应该是转换为Go Items切片的“数据”属性(它是一个数组)的值。我尝试了以下操作,但是我一直得到一个空数组

var items []Item{}
json.Unmarshal(response, &items)
fmt.Println(items)

2 个答案:

答案 0 :(得分:5)

您正试图将JSON解组为切片,但该JSON的根是一个对象(您可以知道,因为JSON以{开头,表示对象的开始)。您需要考虑外层:

type Payload struct {
    Data []Item
}

var payload Payload
json.Unmarshal(response, &payload)
fmt.Println(payload.Data)

答案 1 :(得分:0)

我建议使用这个很酷的工具来帮助您设计结构 https://mholt.github.io/json-to-go/ 就像Adrian所说的那样,您正在尝试用数组将JSON解组到对象。

type Product struct {
    Name string `json:"name"`
}

type Response struct {
    Data []struct {
        Name     string `json:"name"`
        Products []Product `json:"products"`
    } `json:"data"`
}