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
Lepaskan: 2024-12-02 10:11:14
asal
799 orang telah melayarinya

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
   }
}
Salin selepas log masuk

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
    }
}
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan