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

Как безопасно получить доступ к вложенным массивам JSON в Go?

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

How to Safely Access Nested JSON Arrays in Go?

Расшифровка проблем доступа к массиву JSON в Go

При работе с ответами 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