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 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; IBonjour Ralph Bonjour Ralph Bonjour Ralph Bonjour Ralph
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