Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyahmarshalkan Data JSON Sewenang-wenangnya dengan Struktur Berubah-ubah Berdasarkan \'Kod\'?

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

Linda Hamilton
Linda Hamiltonasal
2024-10-30 10:21:03610semak imbas

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>

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!

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