Bagaimana untuk Menyahmarshalkan Data JSON Sewenang-wenangnya dengan Struktur Berubah-ubah Berdasarkan \'Kod\'?

Linda Hamilton
Lepaskan: 2024-10-30 10:21:03
asal
549 orang telah melayarinya

How to Unmarshal Arbitrary JSON Data with Varying Structures Based on a

Menyahmarshalling Arbitrary JSON Data

Soalan:

Bolehkah data JSON disusun mengikut cara yang membolehkan ia dibongkar dalam bahagian atau bahagian? Dalam senario ini, bahagian atas data mentakrifkan "kod" yang menunjukkan jenis data di bahagian bawah, yang mungkin berbeza antara struct. Bagaimanakah ini boleh dicapai dalam Go?

Jawapan:

Untuk menyahmarshall data JSON sewenang-wenangnya di mana bahagian bawah boleh berbeza-beza antara struct, anda boleh menangguhkan menghuraikan bahagian bawah sehingga "kod" dari bahagian atas diketahui.

Pelaksanaan:

  1. Tentukan struct Mesej dengan medan Kod int dan medan Muatan json.RawMessage . Medan ini akan menyimpan sementara bahagian bawah yang tidak dihuraikan.
  2. Buat fungsi untuk menghuraikan dan menyahmarshall jenis struct yang berbeza berdasarkan Kod.
  3. Nyahmarshal struct Mesej daripada data JSON. Ini akan menghuraikan separuh bahagian atas data dan menangguhkan menghuraikan bahagian bawah.
  4. Berdasarkan Kod, buat contoh jenis struct yang sesuai dan buang Payload ke dalamnya.

Contoh Kod:

<code class="go">package main

import (
    "encoding/json"
    "fmt"
)

type Message struct {
    Code    int
    Payload json.RawMessage
}
type Range struct {
    Start int
    End   int
}
type User struct {
    ID   int
    Pass int
}

func MyUnmarshall(m []byte) {
    var message Message
    var payload interface{}
    json.Unmarshal(m, &message)
    switch message.Code {
    case 3:
        payload = new(User)
    case 4:
        payload = new(Range)
    }
    json.Unmarshal(message.Payload, payload)
    fmt.Printf("\n%v%+v", message.Code, payload)
}

func main() {
    json := []byte(`{"Code": 4, "Payload": {"Start": 1, "End": 10}}`)
    MyUnmarshall(json)
    json = []byte(`{"Code": 3, "Payload": {"ID": 1, "Pass": 1234}}`)
    MyUnmarshall(json)
}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshalkan Data JSON Sewenang-wenangnya dengan Struktur Berubah-ubah Berdasarkan \'Kod\'?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!