Golang JSON: обработка вложенных массивов с помощью демаршаллинга
В Go при работе с вложенными массивами JSON после демаршаллинга очень важно понимать ошибку «интерфейс типа {} не поддерживает индексацию». Эта ошибка возникает при попытке доступа к элементу массива JSON, хранящемуся в переменной интерфейса {}.
Чтобы решить эту проблему, вам необходимо использовать утверждения типа для преобразования переменной интерфейса {} в базовый тип массива.
Интерфейс{} Представление в модуле JSON
Модуль JSON представляет массивы как фрагменты []интерфейса{}, а словари — как карту[строка]интерфейс{ } отображается при декодировании в переменную интерфейса {}.
Доступ к вложенным элементам с помощью утверждений типа
Без проверки ошибок вы можете перемещаться по массиву JSON, используя утверждения типа, следующим образом :
objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])
Однако важно отметить, что эти утверждения типов могут вызвать панику, если типы не совпадают. Чтобы избежать этой проблемы, вы можете использовать форму с двумя возвратами и проверить наличие ошибки:
objects, ok := result["objects"].([]interface{})
if !ok {
// Handle error here
}
Декодирование в структуру для улучшенного доступа
Если данные 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