Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengesan Atribut Pendua dalam Rentetan JSON Menggunakan Golang?

Bagaimana untuk Mengesan Atribut Pendua dalam Rentetan JSON Menggunakan Golang?

Mary-Kate Olsen
Lepaskan: 2024-12-05 20:29:11
asal
356 orang telah melayarinya

How to Detect Duplicate Attributes in JSON Strings Using Golang?

Mengesan Atribut Pendua dalam Rentetan JSON Menggunakan Golang

Dalam rentetan JSON, adalah penting untuk mengekalkan integriti data dengan menghalang atribut pendua. Golang menyediakan cara yang mudah untuk mengesan dan mengendalikan pendua tersebut.

Penyelesaian:

Untuk mengesan atribut pendua dalam rentetan JSON, kami boleh menggunakan json.Decoder untuk melintasi struktur JSON. Semasa menyahkod, kami memeriksa objek dan kuncinya, menyemak pendua.

Kod Golang yang disediakan menunjukkan proses ini:

func check(d *json.Decoder, path []string, dup func(path []string) error) error {
    // Handle token and delimeters
    t, err := d.Token()
    if err != nil {
        return err
    }

    delim, ok := t.(json.Delim)

    // Skip scaler types
    if !ok {
        return nil
    }

    switch delim {
    case '{':
        // Initialize map for keys and avoid duplicates
        keys := make(map[string]bool)

        for d.More() {
            key := t.(string)

            if keys[key] {
                return dup(append(path, key))
            }

            keys[key] = true

            if err := check(d, append(path, key), dup); err != nil {
                return err
            }
        }
    case '[':
        i := 0
        for d.More() {
            if err := check(d, append(path, strconv.Itoa(i)), dup); err != nil {
                return err
            }
            i++
        }
    }
    return nil
}
Salin selepas log masuk

Contoh Penggunaan:

data := `{"a": "b", "a":true,"c":["field_3 string 1","field3 string2"], "d": {"e": 1, "e": 2}}`

if err := check(json.NewDecoder(strings.NewReader(data)), nil, printDup); err != nil {
    log.Fatal(err)
}
Salin selepas log masuk

Contoh ini akan melaporkan perkara berikut pendua:

Duplicate a
Duplicate d/e
Salin selepas log masuk

Pengendalian Ralat Tersuai:

Untuk membuang ralat apabila menemui kunci pendua pertama, ubah suai fungsi dupErr() seperti berikut:

func dupErr(path []string) error {
    return ErrDuplicate
}
Salin selepas log masuk

Pendekatan ini membolehkan pengesanan atribut pendua, membolehkan anda mengambil tindakan yang sesuai seperti sebagai log isu atau menapis keluar data pendua.

Atas ialah kandungan terperinci Bagaimana untuk Mengesan Atribut Pendua dalam Rentetan JSON Menggunakan Golang?. 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