Maison >développement back-end >Golang >Comment détecter les attributs en double dans les chaînes JSON à l'aide de Golang ?
Détection des attributs en double dans les chaînes JSON à l'aide de Golang
Dans les chaînes JSON, il est essentiel de maintenir l'intégrité des données en empêchant les attributs en double. Golang fournit un moyen pratique de détecter et de gérer de tels doublons.
Solution :
Pour détecter les attributs en double dans une chaîne JSON, nous pouvons utiliser json.Decoder pour parcourir la structure JSON. Lors du décodage, nous inspectons les objets et leurs clés, en vérifiant les doublons.
Le code Golang fourni démontre ce processus :
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 }
Exemple d'utilisation :
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) }
Cet exemple signalera les doublons suivants :
Duplicate a Duplicate d/e
Erreur personnalisée Manipulation :
Pour générer une erreur lors de la rencontre de la première clé en double, modifiez la fonction dupErr() comme suit :
func dupErr(path []string) error { return ErrDuplicate }
Cette approche permet la détection des attributs en double, vous permettant de prendre les mesures appropriées telles que la journalisation du problème ou le filtrage des données en double.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!