Bagaimana untuk Menyahmarshall Data JSON Arbitrari dalam Bahagian Berdasarkan Kod?

Mary-Kate Olsen
Lepaskan: 2024-10-31 21:27:02
asal
1013 orang telah melayarinya

How to Unmarshall Arbitrary JSON Data in Sections Based on a Code?

Menyahmarshalling Data Arbitrary dalam JSON

Dalam senario tertentu, data JSON mungkin perlu disingkirkan dalam bahagian atau bahagian. Sebagai contoh, bahagian atas data mungkin menunjukkan tindakan yang perlu dilakukan pada bahagian bawah, seperti membongkar struktur tertentu berdasarkan "kod" di bahagian atas.

Pertimbangkan struktur sampel berikut:

<code class="go">type Range struct {
    Start int
    End   int
}

type User struct {
    ID    int
    Pass  int
}</code>
Salin selepas log masuk

Sebagai contoh, data JSON mungkin menyerupai yang berikut:

<code class="json">// Message with "Code" 4, signifying a Range structure
{
    "Code": 4,
    "Payload": {
        "Start": 1,
        "End": 10
    }
}

// Message with "Code" 3, signifying a User structure
{
    "Code": 3,
    "Payload": {
        "ID": 1,
        "Pass": 1234
    }
}</code>
Salin selepas log masuk

Untuk mencapai unmarshalling ini, kita boleh menangguhkan menghuraikan separuh bahagian bawah data JSON sehingga kita telah menentukan kod di bahagian atas. Pertimbangkan pendekatan berikut:

<code class="go">import (
    "encoding/json"
    "fmt"
)

type Message struct {
    Code    int
    Payload json.RawMessage // Delay parsing until we know the code
}

func MyUnmarshall(m []byte) {
    var message Message
    var payload interface{}
    json.Unmarshal(m, &message) // Delay parsing until we know the color space
    switch message.Code {
    case 3:
        payload = new(User)
    case 4:
        payload = new(Range)
    }
    json.Unmarshal(message.Payload, payload) // Error checks omitted for readability
    fmt.Printf("\n%v%+v", message.Code, payload) // Perform actions on the data
}

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

Dengan menggunakan pendekatan ini, anda boleh menyahmarshall arbitrary data JSON secara berkesan dalam bahagian, bergantung pada kod yang ditentukan.

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshall Data JSON Arbitrari dalam Bahagian 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!