Maison >développement back-end >Golang >Changer dynamiquement la clé JSON lors du marshaling et du démarshaling
L'éditeur php Xiaoxin vous présentera une méthode pour modifier dynamiquement les valeurs des clés JSON pendant les processus Marshal et Unmarshal. Lors du traitement des données JSON, nous devons parfois modifier ou remplacer les valeurs clés. Cet article partagera une astuce simple mais efficace pour aider les développeurs à atteindre cet objectif en PHP. En utilisant certaines fonctions et technologies spécifiques, nous pouvons facilement opérer sur les données JSON et répondre au besoin de modifier dynamiquement les valeurs clés. Ensuite, suivez l'éditeur pour apprendre cette technique pratique !
Je suis obligé d'utiliser une API qui possède deux clés ou identifiants différents pour un même objet (numéro de TVA). Cela dépend si l'appel est GET ou POST/PATCH
Dans GET, je dois désorganiser/décoder le json en utilisant cette structure :
type SilverfinCompany struct { ID int `json:"id"` Name string `json:"name"` Vat string `json:"vat"` // here }
Dans POST et PATCH, je peux rassembler les données en json en utilisant cette structure :
<code>type SilverfinCompany struct { ID int `json:"id"` Name string `json:"name"` Vat string `json:"vat_identifier"` // here } </code>
La solution évidente est d'avoir deux structures "différentes" avec le même contenu mais des clés JSON légèrement différentes, et deux fonctions de conversion. Ou avoir deux champs différents dans la structure : Vat et VatIndentifier.
Le problème est que cela ajoute une complexité supplémentaire à un code déjà complexe.
Alors je veux savoir :
Existe-t-il un moyen (semblable à la réflexion) de changer la clé JSON du champ TVA dans la structure en fonction de la situation ?
Vous ne pouvez pas modifier les définitions de type au moment de l'exécution, y compris les balises struct.
Tant que les types et l'ordre des champs (c'est-à-dire la disposition de la mémoire) sont les mêmes, aucune fonction de conversion n'est nécessaire, ils peuvent être convertis directement : https://go.dev/play/p/IhkVM- BMLiY
func main() { foo := SilverfinCompanyFoo{ ID: 1, Name: "Baz", Vat: "Qux", } bar := SilverfinCompanyBar(foo) fmt.Println(bar) } type SilverfinCompanyFoo struct { ID int `json:"id"` Name string `json:"name"` Vat string `json:"vat"` // here } type SilverfinCompanyBar struct { ID int `json:"id"` Name string `json:"name"` Vat string `json:"vat_identifier"` // here } // {1 Baz Qux}
Il s'agit d'une solution courante pour ce type de scénario.
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!