Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyahmarshal JSON ke dalam Struktur Khusus Menggunakan Pembolehubah Antara Muka dalam Go?

Bagaimana untuk Menyahmarshal JSON ke dalam Struktur Khusus Menggunakan Pembolehubah Antara Muka dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-11-27 16:58:11525semak imbas

How to Unmarshal JSON into a Specific Struct Using an Interface Variable in Go?

Cara Menyahmarshal JSON ke dalam Struktur Khusus Menggunakan Pembolehubah Antara Muka

Masalah:

Bila menyahmarshaling JSON ke dalam pembolehubah antara muka, pakej pengekodan/json mentafsirkannya sebagai a peta. Bagaimanakah kita boleh mengarahkannya untuk menggunakan struct tertentu sebaliknya?

Penjelasan:

Pakej JSON memerlukan jenis konkrit untuk disasarkan apabila unmarshaling. Melepasi pembolehubah{} antara muka tidak memberikan maklumat yang mencukupi dan pakej lalai untuk memetakan[rentetan]antara muka{} untuk objek dan []antara muka{} untuk tatasusunan.

Penyelesaian:

Tiada cara terbina dalam untuk memberitahu json.Unmarshal untuk unmarshal menjadi jenis struct konkrit menggunakan pembolehubah antara muka. Walau bagaimanapun, terdapat penyelesaian:

  1. Balut penuding kepada struct yang diingini dalam pembolehubah antara muka.
func getFoo() interface{} {
    return &Foo{"bar"}
}
  1. Lepaskan penunjuk yang dibalut ke json. Unmarshal.
err := json.Unmarshal(jsonBytes, fooInterface)
  1. Akses data unmarshaled melalui pembolehubah antara muka.
fmt.Printf("%T %+v", fooInterface, fooInterface)

Contoh:

Kod berikut menunjukkan teknik:

package main

import (
    "encoding/json"
    "fmt"
)

type Foo struct {
    Bar string `json:"bar"`
}  

func getFoo() interface{} {
    return &Foo{"bar"}
}

func main() {

    fooInterface := getFoo() 
    
    myJSON := `{"bar":"This is the new value of bar"}`
    jsonBytes := []byte(myJSON)

    err := json.Unmarshal(jsonBytes, fooInterface)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Printf("%T %+v", fooInterface, fooInterface) // prints: *main.Foo &{Bar:This is the new value of bar}
}

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal JSON ke dalam Struktur Khusus Menggunakan Pembolehubah Antara Muka dalam Go?. 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