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

Как проанализировать JSON с известными и неизвестными парами ключ/значение в структуре Go?

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

How to Parse JSON with Known and Unknown Key/Value Pairs into a Go Struct?

Отключить JSON с произвольными парами ключ/значение для структурирования

Проблема

Как я могу проанализировать строку JSON с известными и неизвестными парами ключ/значение в структуру Go? Неизвестные поля могут иметь любое имя и тип значения (строка, bool, float64 или int).

Решение

Создайте структуру с известными полями и фрагмент карт для неизвестных полей. :

type Message struct {
    Known1   string `json:"known1"`
    Known2   string `json:"known2"`
    Unknowns []map[string]interface{}
}

Демаршалируйте строку JSON в эту структуру:

json.Unmarshal([]byte(jsonMsg), &msg)

Поле «Неизвестные» будет содержать список карт, представляющих неизвестный ключ/значение пары.

Альтернативы

  1. Двойная демаршалировка:

    • Сначала демаршалируем во временную структуру, содержащую только известные поля.
    • Затем снова выполните демаршалинг в интерфейсе карты[string]{} и извлеките неизвестные значения вручную.
  2. Демаршалирование и преобразование типов:

    • Демаршалирование в интерфейс карты[строка] {}.
    • Пройдитесь по карте и введите утверждение соответствующих значений. типы.

Соображения

Все три решения действительны, но самым простым и элегантным является первоначальный подход на основе структур. Это позволяет избежать необходимости дополнительных демаршалов или ручных преобразований типов.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3