Разобрать вложенные массивы JSON в Go / Golang

#arrays #json #go #unmarshalling

#массивы #json #Вперед #демонтаж

Вопрос:

Привет, у меня проблема с демонтажем вложенных массивов JSON. Какую структуру я должен создать? Я хочу избегать использования interface{} как можно больше, но я действительно не знаю, возможно ли это в этом случае.

Json Я хочу разобрать:

 "[[[{"aaa": "aaa"}]]]"
  

и структуру, которую я хочу использовать, чтобы разобрать это:

 type SomeStructNestedNested struct {
   Aaa string `json:"aaa"`
}
type SomeStructNested struct {
   SomeStructNestedNested []SomeStructNestedNested
}
type SomeStruct struct {
   SomeStructNested []SomeStructNested
}
  

Ссылка на пример:
https://play.golang.org/p/owuMptNrix

Ответ №1:

Да, ответ — это просто фрагмент фрагментов:

 type AutoGenerated [][][]struct {
     Aaa string `json:"aaa"`
}
  

Что ж, благодаря вашему вопросу я обнаружил ошибку в этом инструменте, я всегда использую его для манипулирования Json с помощью Go, это может сэкономить вам много скучного времени, также лучше использовать галочки ` для представления строк json, как здесь

Ответ №2:

Проблема здесь в том, что вы пытаетесь использовать структуры для представления вложенности, когда они на самом деле являются массивами. Я нахожу форму самого json довольно плохой, но если вы застряли на этом, тогда у вас должен быть 3d-массив для unmarshal, используя только этот тип структуры ‘nested nested’. Ниже приведена ссылка на ваш игровой пример с некоторыми грубыми изменениями, чтобы продемонстрировать суть.

 type SomeStructNestedNested struct {
    Aaa string `json:"aaa"`
}

jsonString := "[[[{"aaa": "aaa"}]]]"
d := [][][]SomeStructNestedNested{}
json.Unmarshal([]byte(jsonString), amp;d)
fmt.Printf("%v", d)
  

https://play.golang.org/p/88M0_UR_3_