Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menyahmarshal Tatasusunan JSON dengan Jenis Data Campuran dalam Go?

Bagaimanakah Saya Boleh Menyahmarshal Tatasusunan JSON dengan Jenis Data Campuran dalam Go?

Barbara Streisand
Lepaskan: 2024-12-14 05:00:09
asal
350 orang telah melayarinya

How Can I Unmarshal a JSON Array with Mixed Data Types in Go?

Menyahmarshall Array of Diverse Type

Dalam pengendalian JSON, unmarshalling array dengan pelbagai jenis elemen boleh mencabar. Artikel ini menangani isu tatasusunan unmarshalling yang terdiri daripada elemen dengan jenis data yang diketahui tetapi tidak diisih.

Kaedah Go untuk Penyahkodan Data Arbitrari

Seperti yang digariskan dalam dokumentasi rasmi Go tentang JSON pengekodan, adalah mungkin untuk menyahkod data sewenang-wenang ke dalam antara muka{} menggunakan fungsi json.Unmarshal. Dengan menggunakan penegasan jenis, jenis data boleh ditentukan secara dinamik.

Menyesuaikan Kod Anda

Versi kod anda yang diubah suai berikut mempamerkan pendekatan ini:

package main

import (
    "encoding/json"
    "fmt"
)

var my_json string = `{
    "an_array":[
    "with_a string",
    {
        "and":"some_more",
        "different":["nested", "types"]
    }
    ]
}`

func IdentifyDataTypes(f interface{}) {
    switch vf := f.(type) {
    case map[string]interface{}:
        fmt.Println("is a map:")
        for k, v := range vf {
            switch vv := v.(type) {
            case string:
                fmt.Printf("%v: is string - %q\n", k, vv)
            case int:
                fmt.Printf("%v: is int - %q\n", k, vv)
            default:
                fmt.Printf("%v: ", k)
                IdentifyDataTypes(v)
            }

        }
    case []interface{}:
        fmt.Println("is an array:")
        for k, v := range vf {
            switch vv := v.(type) {
            case string:
                fmt.Printf("%v: is string - %q\n", k, vv)
            case int:
                fmt.Printf("%v: is int - %q\n", k, vv)
            default:
                fmt.Printf("%v: ", k)
                IdentifyDataTypes(v)
            }

        }
    }
}

func main() {

    fmt.Println("JSON:\n", my_json, "\n")

    var f interface{}
    err := json.Unmarshal([]byte(my_json), &f)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Printf("JSON: ")
        IdentifyDataTypes(f)
    }
}
Salin selepas log masuk

Output

Kod menghasilkan yang berikut output:

JSON:
 {
    "an_array":[
    "with_a string",
    {
        "and":"some_more",
        "different":["nested", "types"]
    }
    ]
}

JSON: is a map:
an_array: is an array:
0: is string - "with_a string"
1: is a map:
and: is string - "some_more"
different: is an array:
0: is string - "nested"
1: is string - "types"
Salin selepas log masuk

Pendekatan ini membolehkan pengecaman dinamik dan pengendalian jenis elemen dalam tatasusunan, menyediakan penyelesaian serba boleh untuk keperluan anda yang tidak tersusun.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyahmarshal Tatasusunan JSON dengan Jenis Data Campuran 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