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
Lepaskan: 2024-12-04 07:44:12
asal
1040 orang telah melayarinya

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)
}
Salin selepas log masuk

Kehendak ini output:

Duplicate a
Duplicate d/e
Salin selepas log masuk

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)
}
Salin selepas log masuk

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!

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