Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyahmarshal JSON dengan Cekap menjadi Array of Go Structs?

Bagaimana untuk Menyahmarshal JSON dengan Cekap menjadi Array of Go Structs?

Barbara Streisand
Barbara Streisandasal
2024-12-02 10:11:14720semak imbas

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

Menyahmarshall JSON ke dalam Array of Objects in Go

Anda menghadapi cabaran semasa cuba menghuraikan objek JSON ke dalam tatasusunan struct tersuai . JSON yang anda berikan, bagaimanapun, nampaknya tidak sah kerana ia tidak mempunyai koma antara pasangan nilai kunci dalam objek peringkat atas. Berikut ialah JSON yang diperbetulkan dan diformatkan:

{
   "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
   }
}

Menghuraikan dengan Penegasan Jenis

Percubaan awal anda untuk menghuraikan JSON mengalami ralat kerana anda menetapkan peta yang terhasil daripada pembongkaran JSON kepada antara muka{} nilai. Apabila mengindeks peta ini, anda perlu menaip menegaskan nilai sekali lagi dengan v.(map[rentetan]antara muka{}) dan setiap kali anda mendapatkan kunci daripada peta.

Selain itu, anda cuba memasukkan int sebagai kunci peta dengan rentetan sebagai kekunci, yang akan mengakibatkan ralat selanjutnya.

Penyingkiran yang Cekap

Kepada memudahkan proses unmarshalling dan mengelakkan penegasan jenis manual, anda boleh menggunakan teknik di mana anda menyediakan unmarshalling dengan jenis data sasaran secara langsung. Berikut ialah contoh yang dikemas kini:

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
    }
}

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal JSON dengan Cekap menjadi Array of Go Structs?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn