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
Mary-Kate Olsenasal
2024-12-05 20:29:11329semak imbas

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
}

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)
}

Contoh ini akan melaporkan perkara berikut pendua:

Duplicate a
Duplicate d/e

Pengendalian Ralat Tersuai:

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

func dupErr(path []string) error {
    return ErrDuplicate
}

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!

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