Détecter les attributs en double dans les chaînes JSON avec Go
Comment identifier les attributs en double dans les chaînes JSON dans Go ? Examinons une solution utilisant le décodage JSON et l'analyse des valeurs clés.
Décodage de la chaîne JSON
Nous utilisons json.Decoder pour parcourir la chaîne JSON. Lorsque nous rencontrons des objets, nous parcourons leurs clés et leurs valeurs à la recherche de doublons.
Vérification des doublons
Dans la fonction de vérification, nous distinguons les différents délimiteurs et gérons chaque cas séparément :
Utilisation Exemple
Pour démontrer sa fonctionnalité, définissons une fonction printDup qui imprime le chemin de clé en double et appelons check sur un exemple de chaîne JSON :
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) }
Cela affichera :
Duplicate a Duplicate d/e
Gérer les doublons avec des erreurs
Alternativement, on peut générer une erreur sur la première clé en double rencontrée :
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) }
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!