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

Comment détecter les attributs en double dans les chaînes JSON à l'aide de Golang ?

Mary-Kate Olsen
Libérer: 2024-12-05 20:29:11
original
352 Les gens l'ont consulté

How to Detect Duplicate Attributes in JSON Strings Using 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
}
Copier après la connexion

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

Cet exemple signalera les doublons suivants :

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

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

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!

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