Доступ к вложенным данным JSON в Golang: разрешение «интерфейс типа {} не поддерживает индексацию». Ошибка
При работе с вложенными ответами JSON в Голанг, важно правильно обрабатывать типы данных. Если вы столкнулись с ошибкой «недопустимая операция: d["data"] (интерфейс типа {} не поддерживает индексацию)», это обычно происходит из-за того, что вы пытаетесь напрямую проиндексировать переменную интерфейса {}.
To Чтобы решить эту проблему, вам необходимо выполнить другое утверждение типа, чтобы указать правильный тип данных. Давайте углубимся в решение:
Утверждение типа для промежуточной карты
Переменная d имеет тип интерфейса{}, который является динамическим типом в Golang. Вам нужно ввести «assert» для определенного типа, чтобы получить доступ к его полям. В этом случае мы знаем, что в ответе есть поле «данные», содержащее сопоставление строк с интерфейсами. Итак, вы можете добавить еще одно утверждение типа для приведения d к map[string]interface{} перед индексацией:
test := d.(map[string]interface{})["data"].(map[string]interface{})["type"]
Теперь тест будет хранить значение поля "type" во вложенной карте данных.
Необязательно Утверждение типа для d
Если вы с самого начала объявляете d как интерфейс карты[string]{}, вы можете пропустить утверждение первого типа:
var d map[string]interface{}
...
test := d["data"].(map[string]interface{})["type"]
Это приведет к прямому приведению d к правильному типу карты, устраняя необходимость в утверждении промежуточного типа.
Заключение
Понимая типы данных и выполняя соответствующие утверждения типов, вы можете получать доступ и работать с вложенными ответами JSON в Golang, не сталкиваясь с ошибками индексации. Помните, интерфейс Go{} универсален, но для доступа к определенным типам может потребоваться дополнительная обработка.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3