При работе с ответами JSON в Go доступ к элементам внутри вложенных массивов может вызвать проблемы. Часто при попытке получить определенные точки данных возникают ошибки типа «интерфейс типа {} не поддерживает индексирование».
Чтобы решить эту проблему, крайне важно понять основную природу ответов JSON в Go. По умолчанию массивы представлены как фрагменты []interface{}, а словари — как карты map[string]interface{}. Следовательно, переменные интерфейса не поддерживают индексацию.
Для доступа к вложенным элементам становятся необходимыми утверждения типов. Один из подходов — сделать следующее без проверки ошибок:
objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])
Однако этот метод может привести к панике, если типы не совпадают. Более надежный подход — использовать форму с двумя возвратами и обрабатывать потенциальные ошибки:
objects, ok := result["objects"].([]interface{})
if !ok {
// Handle error
}
Если ваш JSON имеет согласованную структуру, рассмотрите возможность декодирования непосредственно в пользовательский тип:
type Result struct {
Query string `json:"query"`
Count int `json:"count"`
Objects []struct {
ItemId string `json:"ITEM_ID"`
ProdClassId string `json:"PROD_CLASS_ID"`
Available int `json:"AVAILABLE"`
} `json:"objects"`
}
После декодирования вы можете легко получить доступ к вложенным элементам, таким как result.Objects[0].ItemId.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3