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

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

Опубликовано 21 декабря 2024 г.
Просматривать:170

How to Unmarshal Nested JSON into an Array of Objects in Go?

Демаршалинг вложенного JSON в массив объектов в Go

Проблема

Рассмотрим следующие данные JSON:

{
   "1001":{
      "level":10,
      "monster-id":1001,
      "skill-level":1,
      "aimer-id":301
   },
   "1002":{
      "level":12,
      "monster-id":1002,
      "skill-level":1,
      "aimer-id":302
   },
   "1003":{
      "level":16,
      "monster-id":1003,
      "skill-level":2,
      "aimer-id":303
   }
}

Цель состоит в том, чтобы преобразовать этот JSON в массив объектов Monster.

type Monster struct {
    MonsterId  int32
    Level      int32
    SkillLevel int32
    AimerId    int32
}

Решение

Чтобы добиться этого, выполните следующие действия:

  1. Определите MonsterCollection: Создайте тип MonsterCollection для хранения карты Monster объекты со строковыми ключами.
type MonsterCollection struct {
    Pool map[string]Monster
}
  1. Реализация метода FromJson: Определите метод FromJson для типа MonsterCollection для обработки демаршалинга.
func (mc *MonsterCollection) FromJson(jsonStr string) error {
    var data *map[string]Monster
    b := []byte(jsonStr)
    return json.Unmarshal(b, &data)
}
  • Использование var data *map[string]Monster избегает использования интерфейса{}, гарантируя, что результирующая карта имеет нужный тип.
  • Передача данных в виде указателя гарантирует, что изменения, внесенные во время демаршалинга, отражаются в пуле MonsterCollection. поле.
  1. Правильный тип ключа в пуле: Измените тип ключа карты пула на строку, соответствующую ключам в данных JSON.
  2. Используйте теги структуры: Добавьте теги структуры JSON в структуру Monster, чтобы указать имена полей в JSON. data.
type Monster struct {
    MonsterId  int32 `json:"monster-id"`
    Level      int32 `json:"level"`
    SkillLevel int32 `json:"skill-level"`
    AimerId    int32 `json:"aimer-id"`
}
  1. Вызов FromJson: Вызовите метод FromJson со строкой JSON, чтобы демаршалировать данные в MonsterCollection.
mc := new(MonsterCollection)
err := mc.FromJson(jsonStr)
  1. Проверка ошибок: Обработка любых ошибок, возвращаемых FromJson, в целях отладки.
  2. Доступ к объектам : Используйте поле «Пул» коллекции MonsterCollection для доступа к отдельному монстру. объекты.
for id, monster := range mc.Pool {
    fmt.Println(id, monster)
}

Следуя этим шагам, вы сможете успешно демаршалировать вложенные данные JSON в массив объектов Monster в Go.

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

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

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

Copyright© 2022 湘ICP备2022001581号-3