Unmarshal массив, вложенный в объект JSON - PullRequest
0 голосов
/ 27 сентября 2018

У меня возникли некоторые проблемы unmarshalling эти данные JSON для фрагмента Go с элементами, которые содержат структуры элементов:

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
    }

фрагментв основном это должно быть значение атрибута «data» (который является массивом), преобразованного в срез Go Items.Я попробовал следующее, но я продолжал получать пустой массив

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

Ответы [ 2 ]

0 голосов
/ 10 августа 2019

Я бы порекомендовал использовать этот классный инструмент, чтобы помочь вам спроектировать вашу структуру https://mholt.github.io/json-to-go/ Также, как сказал Эдриан, вы пытаетесь демонтировать json с массивом в объект.

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

type Response struct {
    Data []struct {
        Name     string `json:"name"`
        Products []Product `json:"products"`
    } `json:"data"`
}
0 голосов
/ 27 сентября 2018

Вы пытаетесь демонтировать этот JSON в срез, но корень этого JSON - это объект (вы можете сказать, потому что JSON начинается с {, указывающего начало объекта).Вы должны учитывать этот внешний слой:

type Payload struct {
    Data []Item
}

var payload Payload
json.Unmarshal(response, &payload)
fmt.Println(payload.Data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...