Maison > développement back-end > Golang > Comment puis-je détecter les attributs en double dans les chaînes JSON à l'aide de Go ?

Comment puis-je détecter les attributs en double dans les chaînes JSON à l'aide de Go ?

Susan Sarandon
Libérer: 2024-12-04 07:44:12
original
953 Les gens l'ont consulté

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

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 :

  • Objets ({}) : Nous créons une carte pour suivre clés uniques. Si une clé en double est trouvée, nous appelons une fonction dup définie par l'utilisateur qui peut enregistrer la clé en double ou renvoyer une erreur pour terminer le parcours.
  • Tableaux ([]): Nous traitons chacun élément en tant qu'élément dans une tranche et vérifiez récursivement les doublons dans cet élé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)
}
Copier après la connexion

Cela affichera :

Duplicate a
Duplicate d/e
Copier après la connexion

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)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal