Maison >développement back-end >Golang >Comment gérer les champs JSON incohérents : chaînes ou tableaux ?
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"` }
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 :
Mise à jour Code :
type MyListItem struct { Date string `json:"date"` RawDisplayName json.RawMessage `json:"display_name"` DisplayName []string `json:"-"` }
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 }
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, "&&") } }
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, "&&") } } }
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!