Maison > développement back-end > Golang > Comment puis-je faire la différence entre les valeurs vides et manquantes lors du démarshaling JSON dans Go ?

Comment puis-je faire la différence entre les valeurs vides et manquantes lors du démarshaling JSON dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-04 09:40:15
original
243 Les gens l'ont consulté

How Can I Differentiate Between Empty and Missing Values When Unmarshaling JSON in Go?

Discerner les valeurs vides et non spécifiées dans Go Unmarshaling

Lors du démarshaling de données JSON dans des structures Go, il peut être difficile de faire la distinction entre vides et manquants valeurs. Ceci est particulièrement important lorsque vous souhaitez gérer ces valeurs différemment dans votre programme.

Considérez l'exemple suivant :

import (
    "encoding/json"
    "fmt"
)

type Category struct {
    Name        string
    Description string
}

var categories []Category

jsonBlob := []byte(`[
    {"Name": "A", "Description": "Monotremata"},
    {"Name": "B"},
    {"Name": "C", "Description": ""}
]`)

err := json.Unmarshal(jsonBlob, &categories)
if err != nil {
    fmt.Println("error:", err)
}
fmt.Printf("%+v", categories)
Copier après la connexion

Dans cet exemple, le champ Description de la catégorie B est vide, tandis que le champ Description de la catégorie C n'est pas précisé dans le JSON. Le résultat est :

[{Name:A Description:Monotremata} {Name:B Description:} {Name:C Description:}]
Copier après la connexion

Comme vous pouvez le voir, il n'est pas possible de faire la distinction entre ces deux cas.

Solution

Vous pouvez faites la différence entre les valeurs vides et manquantes en changeant le type de champ en pointeur. Si la valeur est présente dans JSON avec une valeur de chaîne vide, elle sera définie sur un pointeur qui pointe vers une chaîne vide. S'il n'est pas présent dans JSON, il restera nul.

type Category struct {
    Name        string
    Description *string
}
Copier après la connexion

Avec cette modification, le résultat devient :

[{Name:A Description:0x1050c150} {Name:B Description:<nil>} {Name:C Description:0x1050c158}]
Copier après la connexion

Maintenant, vous pouvez utiliser la valeur nil pour identifier champs manquants et gérez-les en conséquence.

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