Maison >développement back-end >Golang >Comment puis-je transformer les chaînes JSON en types Go Scalar personnalisés ?

Comment puis-je transformer les chaînes JSON en types Go Scalar personnalisés ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-02 13:08:16746parcourir

How Can I Unmarshal JSON Strings into Custom Go Scalar Types?

Désagrégation des valeurs JSON en types scalaires dérivés dans Go

Problème

Dans Go, la désorganisation des valeurs JSON en types scalaires personnalisés peut être difficile en raison de la impossibilité de modifier la valeur scalaire dans la méthode UnmarshalJSON. Ce problème survient lors de l'implémentation d'UnmarshalJSON pour les types dérivés de scalaires, empêchant la conversion automatique des chaînes dans JSON en valeurs du type dérivé.

Solution

Pour résoudre ce problème, suivez ces étapes :

  1. Utilisez un récepteur de pointeur pour la méthode unmarshal. Cela permet les modifications apportées au sein de la méthode à refléter dans la valeur d'origine.
  2. Désorganisez le texte JSON en une chaîne simple. Supprimez les guillemets ou séquences d'échappement JSON.
  3. Utilisez le type dérivé méthode pour convertir la chaîne en la valeur souhaitée. Dans ce cas, appelez la méthode Lookup pour obtenir le PersonID value.

Exemple

Voici une implémentation corrigée de la méthode UnmarshalJSON pour PersonID :

func (intValue *PersonID) UnmarshalJSON(data []byte) error {
  var s string
  if err := json.Unmarshal(data, &s); err != nil {
    return err
  }
  *intValue = Lookup(s)
  return nil
}

De plus, assurez-vous que la balise JSON dans la structure MyType correspond le nom du champ dans l'exemple JSON. Si nécessaire, mettez à jour json : "person" pour qu'il corresponde à la balise JSON utilisée dans l'exemple.

Conclusion

En suivant ces étapes, vous pouvez implémenter UnmarshalJSON pour les types scalaires dérivés, permettant la conversion automatique de chaînes JSON au type de valeur souhaité. Cela permet une analyse sans effort des données JSON en types personnalisés.

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