Maison > développement back-end > Golang > Comment gérer les champs JSON incohérents : chaînes ou tableaux ?

Comment gérer les champs JSON incohérents : chaînes ou tableaux ?

Barbara Streisand
Libérer: 2024-12-05 03:51:13
original
269 Les gens l'ont consulté

How to Handle Inconsistent JSON Fields: Strings vs. Arrays?

Gestion des champs JSON incohérents : un cas de chaînes par rapport aux tableaux

Lorsque vous traitez des données JSON qui ne sont pas entièrement cohérentes, des défis peuvent survenir dans le processus de démarchage. Cela peut se produire lorsqu'un champ particulier du JSON varie dans son format, ce qui pose des difficultés pour le processus de désorganisation.

Le problème :

Considérez le scénario suivant :

type MyListItem struct {
    Date  string `json:"date"`
    DisplayName       string `json:"display_name"`
}

type MyListings struct {
    CLItems []MyListItem `json:"myitems"`
}
Copier après la connexion

Les données JSON ont un champ appelé "display_name", qui devrait être une chaîne. Cependant, dans certains cas, il peut également s’agir d’un tableau de chaînes. Cette incohérence complique le processus de démarchage, entraînant des erreurs.

La solution :

Pour surmonter ce défi, nous pouvons exploiter deux techniques :

  1. Utilisation de json.RawMessage : Capturez le champ problématique en tant que json.RawMessage type.
  2. Utilisation du nom JSON "-" : Définissez le champ "DisplayName" comme "-" dans le décodeur JSON pour l'exclure du processus de désorganisation.

Mise à jour Code :

type MyListItem struct {
    Date           string          `json:"date"`
    RawDisplayName json.RawMessage `json:"display_name"`
    DisplayName    []string        `json:"-"`
}
Copier après la connexion

Désorganisation du JSON :

Désorganisation du JSON de niveau supérieur :

var li MyListItem
if err := json.Unmarshal(data, &li); err != nil {
    // handle error
}
Copier après la connexion

Extraction du "DisplayName " champ en fonction de son tapez :

if len(li.RawDisplayName) > 0 {
    switch li.RawDisplayName[0] {
    case '"':
        if err := json.Unmarshal(li.RawDisplayName, &li.DisplayName); err != nil {
            // handle error
        }
    case '[':
        var s []string
        if err := json.Unmarshal(li.RawDisplayName, &s); err != nil {
            // handle error
        }
        li.DisplayName = strings.Join(s, "&&")
    }
}
Copier après la connexion

Exemple :

var listings MyListings
if err := json.Unmarshal([]byte(data), &listings); err != nil {
    // handle error
}
for i := range listings.CLItems {
    li := &listings.CLItems[i]
    if len(li.RawDisplayName) > 0 {
        switch li.RawDisplayName[0] {
        case '"':
            if err := json.Unmarshal(li.RawDisplayName, &li.DisplayName); err != nil {
                // handle error
            }
        case '[':
            var s []string
            if err := json.Unmarshal(li.RawDisplayName, &s); err != nil {
                // handle error
            }
            li.DisplayName = strings.Join(s, "&&")
        }
    }
}
Copier après la connexion

En adoptant ces techniques, vous pouvez gérer efficacement les champs JSON incohérents, garantissant ainsi une extraction et une manipulation appropriées des données dans votre application. .

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