«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как обрабатывать вложенные массивы в демаршаллинге Go JSON?

Как обрабатывать вложенные массивы в демаршаллинге Go JSON?

Опубликовано 8 ноября 2024 г.
Просматривать:929

How to Handle Nested Arrays in Go JSON Unmarshalling?

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