首頁 > 後端開發 > Golang > 如何有效地將 JSON 解組為 Go 結構陣列?

如何有效地將 JSON 解組為 Go 結構陣列?

Barbara Streisand
發布: 2024-12-02 10:11:14
原創
777 人瀏覽過

How to Efficiently Unmarshal JSON into an Array of Go Structs?

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

嘗試將 JSON 物件解析為自訂結構陣列時遇到挑戰。但是,您提供的 JSON 似乎無效,因為它在頂級物件中的鍵值對之間缺少逗號。以下是經過更正和格式化的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 時遇到了錯誤,因為您將JSON 解組產生的映射分配給了介面{}價值。索引此對應時,您需要使用 v.(map[string]interface{}) 再次輸入斷言值,並且每次從映射中擷取鍵時。

此外,您嘗試插入一個 int作為以字串為鍵的映射的鍵,這會導致進一步的錯誤。

高效解組

簡化解組過程並避免手動類型斷言,您可以使用直接提供目標資料類型的解組技術。這是一個更新的範例:

package main

import (
    "encoding/json"
)

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 = &mc.Pool
    b := []byte(jsonStr)
    return json.Unmarshal(b, data)
}

func main() {
    jsonString := `{
        "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
        }
    }`

    mc := MonsterCollection{}
    if err := mc.FromJson(jsonString); err != nil {
        // Handle error
    }

    for _, monster := range mc.Pool {
        // Access monster data here
    }
}
登入後複製

以上是如何有效地將 JSON 解組為 Go 結構陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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