首頁 > 後端開發 > Golang > 如何在 Go 中將 JSON 解組為物件數組?

如何在 Go 中將 JSON 解組為物件數組?

Mary-Kate Olsen
發布: 2024-11-27 08:19:09
原創
221 人瀏覽過

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

將JSON 解組為Go 中的物件陣列

將JSON 資料解析為自訂Go 結構對於許多程式設計任務至關重要。本題探討如何在 Go 中將 JSON 解析為物件陣列。

問題

問題中提供的JSON 資料表現出特定的格式,其中每個鍵代表一個唯一標識符,對應的值是一個包含多個屬性的嵌套物件。目標是將這些 JSON 資料解組到一個結構數組中,其中數組中的每個元素代表 JSON 中的巢狀物件之一。

問題中提供的程式碼片段嘗試將 JSON 解析為MonsterCollection 結構,其中包含 Monster 結構的字串對映。但是,由於類型不匹配,編譯器報告無效操作錯誤。

解決方案

程式碼片段的主要問題在於它將 JSON 解組為介面{} 類型,允許動態類型,但功能有限。要存取嵌套物件中的特定字段,需要將循環中的 v 變數類型斷言為正確的類型。

此外,程式碼嘗試將 Monster 物件插入具有整數鍵的映射中。但是,Pool 映射是字串到 Monster 結構的映射,因此鍵應該是字串。

以下程式碼示範如何正確地將JSON 解組為Monster 結構陣列:

type Monster struct {
    MonsterId  int32 `json:"monster-id"`
    Level      int32 `json:"level"`
    SkillLevel int32 `json:"skill-level"`
    AimerId    int32 `json:"aimer-id"`
}

type MonsterCollection struct {
    Pool map[string]Monster
}

func (mc *MonsterCollection) FromJson(jsonStr string) error {
    var data map[string]Monster
    b := []byte(jsonStr)
    err := json.Unmarshal(b, &data)
    if err != nil {
        return err
    }

    mc.Pool = data
    return nil
}
登入後複製

在此程式碼中:

  • Monster 結構使用json 標籤將欄位名稱對應到對應的JSON鍵。
  • MonsterCollection 結構包含字串到 Monster 結構的映射,使用唯一識別碼作為鍵。
  • MonsterCollection 的 FromJson 方法將 JSON 字串作為參數,將其解組到資料映射,將映射分配給 Pool 字段,並傳回遇到的任何錯誤。

現在,JSON資料可以被解組到 MonsterCollection 結構中並透過 Pool 映射進行訪問,這提供了一種使用唯一標識符檢索單個怪物的便捷方法。

以上是如何在 Go 中將 JSON 解組為物件數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板