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
Lepaskan: 2024-11-27 16:58:11
asal
584 orang telah melayarinya

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"}
}
Salin selepas log masuk
  1. Lepaskan penunjuk yang dibalut ke json. Unmarshal.
err := json.Unmarshal(jsonBytes, fooInterface)
Salin selepas log masuk
  1. Akses data unmarshaled melalui pembolehubah antara muka.
fmt.Printf("%T %+v", fooInterface, fooInterface)
Salin selepas log masuk

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

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!

sumber:php.cn
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