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
Mary-Kate Olsenoriginal
2024-12-05 20:29:11329parcourir

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
}

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!

Déclaration:
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