Maison > développement back-end > Golang > Changer dynamiquement la clé JSON lors du marshaling et du démarshaling

Changer dynamiquement la clé JSON lors du marshaling et du démarshaling

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2024-02-11 09:30:09
avant
1305 Les gens l'ont consulté

marshal 和 unmarshal 时动态更改 json key

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 !

Contenu de la question

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
}
Copier après la connexion

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>
Copier après la connexion

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 ?

Solution de contournement

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}
Copier après la connexion

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!

Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal