Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengesan Atribut Pendua dalam Rentetan JSON Menggunakan Go?

Bagaimanakah Saya Boleh Mengesan Atribut Pendua dalam Rentetan JSON Menggunakan Go?

Susan Sarandon
Susan Sarandonasal
2024-12-04 07:44:121029semak imbas

How Can I Detect Duplicate Attributes in JSON Strings Using Go?

Kesan Atribut Pendua dalam Rentetan JSON dengan Go

Bagaimanakah kita mengenal pasti atribut pendua dalam rentetan JSON dalam Go? Mari kita mendalami penyelesaian menggunakan penyahkodan JSON dan analisis nilai kunci.

Menyahkod Rentetan JSON

Kami menggunakan json.Decoder untuk melintasi rentetan JSON. Apabila kami menemui objek, kami mengulangi kekunci dan nilainya untuk mencari pendua.

Menyemak Pendua

Dalam fungsi semak, kami membezakan antara pembatas dan pemegang yang berbeza setiap kes secara berasingan:

  • Objek ({}): Kami mencipta peta untuk menjejak kunci unik. Jika kunci pendua ditemui, kami memanggil fungsi pendua yang ditentukan pengguna yang boleh melog pendua atau mengembalikan ralat untuk menamatkan traversal.
  • Array ([]): Kami merawat setiap satu elemen sebagai item dalam kepingan dan semak secara rekursif untuk pendua di dalamnya item.

Contoh Penggunaan

Untuk menunjukkan kefungsiannya, mari tentukan fungsi printDup yang mencetak laluan kunci pendua dan semakan panggilan pada rentetan JSON sampel:

func printDup(path []string) error {
    fmt.Printf("Duplicate %s\n", strings.Join(path, "/"))
    return nil
}

...

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

Kehendak ini output:

Duplicate a
Duplicate d/e

Mengendalikan Pendua dengan Ralat

Sebagai alternatif, kami boleh menjana ralat pada kunci pendua pertama yang ditemui:

var ErrDuplicate = errors.New("duplicate")

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

...

data := `{"a": "b", "a":true,"c":["field_3 string 1","field3 string2"], "d": {"e": 1, "e": 2}}`
err := check(json.NewDecoder(strings.NewReader(data)), nil, dupErr)
if err == ErrDuplicate {
    fmt.Println("found a duplicate")
} else if err != nil {
    // some other error
    log.Fatal(err)
}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Atribut Pendua dalam Rentetan JSON Menggunakan Go?. 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