"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment implémenter Unmarshaljson pour les types scalaires dérivés dans GO?

Comment implémenter Unmarshaljson pour les types scalaires dérivés dans GO?

Publié le 2025-04-13
Parcourir:311

How to Implement UnmarshalJSON for Derived Scalar Types in Go?

implémentation unmarshaljson pour les scalars dérivés dans go

Problème:
Un type personnalisé qui convertit les constantes entières sous-types et vice-versa nécessite une unmarshals de json de json et vice-vierge. Ceci est difficile car Unmarshaljson ne fournit pas de moyen de modifier la valeur scalaire sans utiliser une structure.

Solution:
pour implémenter Unmarshaljson pour un type scalaire dérivé, considérer les étapes suivantes:

utilisez un récepteur de point pour un point: pour le réception de point pour le point:
pour le réception de point:

pour un point pour un point pour le point:

pour un point pour un point pour un point: pour un point pour un point pour le point: Méthode unmarshaljson pour modifier la valeur du récepteur.

unmarshal à une chaîne: unmarshal le texte json en une chaîne ordinaire, supprimant tous les devis JSON. PersonID en fonction de la valeur de la chaîne. Attribuez le résultat au récepteur.

Exemple:

func (intValue * personId) unmarshaljson (data [] byte) error { chaîne var s Si err: = json.unmarshal (data, & s); err! = Nil { retourner err } * intValue = recherche (s) retour nil }
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
}

Exemple de code:

package main importer ( "Encoding / JSON" "FMT" ) Type PersonID int const ( Bob Personid = iota Jeanne Ralph Personne = -1 ) var namemap = map [string] personId { "Bob": Bob, "Jane": Jane, "Ralph": Ralph, "Personne": personne, } var idmap = map [personId] String { Bob: "Bob", Jane: "Jane", Ralph: "Ralph", Personne: "personne", } func (intValue personId) name () String { return idmap [intValue] } Func Lookup (nom de nom) personID { retourner namemap [name] } func (intvalue * personId) unmarshaljson (data [] byte) { chaîne var s Si err: = json.unmarshal (data, & s); err! = Nil { retourner err } * intValue = recherche (s) retour nil } Tapez myType struct { Personne personid `JSON:" personne "` Count int `JSON:" Count "` Greatting String `JSON:" salutation "` } func main () { var m myType Si err: = json.unmarshal ([] byte (`{" personne ":" ralph "," count ": 4," saluer ":" bonjour "}`), & m); err! = Nil { fmt.println (err) } autre { pour i: = 0; I 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 } output:

Bonjour Ralph Bonjour Ralph Bonjour Ralph Bonjour Ralph
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3