Maison >développement back-end >Golang >Comment puis-je gérer les champs JSON incohérents (chaînes ou tableaux) dans Go ?

Comment puis-je gérer les champs JSON incohérents (chaînes ou tableaux) dans Go ?

DDD
DDDoriginal
2024-12-06 15:30:13214parcourir

How Can I Handle Inconsistent JSON Fields (Strings vs. Arrays) in Go?

Désorganisation de JSON avec des champs incohérents : gestion des chaînes et des tableaux

Lors de la désorganisation de données JSON dans une structure Go, il peut être difficile de gérer les champs dont le type peut varier. Par exemple, un champ peut être une chaîne dans la plupart des cas, mais parfois un tableau de chaînes. Pour résoudre ce problème, nous présentons une solution qui exploite les puissantes capacités d'analyse JSON de Go.

Capturer le champ variable avec json.RawMessage

La clé pour gérer les champs JSON incohérents consiste à capturer les données brutes à l'aide de json.RawMessage. Ce type est une tranche d'octets qui stocke la valeur JSON non analysée. En stockant les données brutes, nous avons la possibilité de les analyser ultérieurement en fonction de leur type spécifique.

Masquer le champ DisplayName et le remplir après le décodage

Pour éviter Pour empêcher le décodeur de tenter d'interpréter le champ DisplayName avant d'avoir les données pertinentes, nous le masquons en utilisant le nom JSON "-". Ce nom indique au décodeur d'ignorer le champ lors de la désorganisation initiale. Une fois le JSON de niveau supérieur décodé, nous remplissons manuellement le champ DisplayName en fonction des données brutes analysées.

Gestion des différents types de données brutes

En fonction de que la donnée brute soit une chaîne ou un tableau de chaînes, on procède comme suit :

  • Si la donnée brute est une chaîne, on désorganisez-le en une seule chaîne et attribuez-le à DisplayName.
  • Si les données brutes sont un tableau de chaînes, nous les désorganisons en une tranche de chaînes et les stockons dans DisplayName après avoir joint les chaînes avec un délimiteur.

Intégrer dans une boucle pour MyListings

Pour gérer une liste d'éléments, tels que MyListings, nous pouvons parcourir chaque élément et exécuter la même logique de démarchage que celle décrite ci-dessus. Cela nous permet de gérer toute incohérence dans le champ DisplayName pour chaque élément.

Encapsuler la logique avec un Unmarshaler personnalisé

Si plusieurs champs du modèle de données peuvent avoir des incohérences types, il peut être avantageux d’encapsuler la logique dans un type personnalisé qui implémente l’interface json.Unmarshaler. Cela simplifie le processus et réduit la duplication.

En conclusion, en utilisant json.RawMessage et en masquant les champs variables, nous pouvons efficacement dissocier les données JSON avec des champs incohérents, garantissant ainsi que toutes les données nécessaires sont capturées et analysées correctement. Les exemples fournis et les liens vers des terrains de jeux démontrent la solution en pratique.

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