Maison > développement back-end > Golang > Comment puis-je désorganiser JSON avec un ensemble de balises et rassembler avec un autre en Go ?

Comment puis-je désorganiser JSON avec un ensemble de balises et rassembler avec un autre en Go ?

Barbara Streisand
Libérer: 2025-01-03 14:40:40
original
368 Les gens l'ont consulté

How Can I Unmarshal JSON with One Set of Tags and Marshal with Another in Go?

Marshalling et Unmarshalling avec plusieurs balises JSON

Lors du démarshalling des données JSON dans une structure, chaque champ doit avoir une balise JSON correspondante pour spécifier son clé JSON correspondante. Cependant, vous devrez parfois créer un nouveau fichier JSON avec les mêmes données mais des balises JSON différentes.

Dans votre cas, vous souhaitez annuler le marshalage du JSON {"name":"Sam","age": 20} à la structure Foo, puis créez une version modifiée avec les balises employ_name et - pour l'envoyer à un autre serveur.

Bien qu'il soit pratique d'attribuer plusieurs balises JSON à un seul champ lorsque vous proposé, cela n’est pas pris en charge dans le package encoding/json dans Go. Au lieu de cela, vous pouvez obtenir le résultat souhaité en utilisant des types et un casting non exportés.

package main

import (
    "bytes"
    "encoding/json"
)

type Foo struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    data := []byte(`{"name":"Sam","age":20}`)

    // Unmarshal to Foo
    var foo Foo
    json.Unmarshal(data, &foo)

    // Create a new type with modified tags
    type Bar struct {
        Name string `json:"employee_name"`
        Age  int    `json:"-"`
    }

    // Cast from Foo to Bar
    bar := Bar(foo)

    // Marshal Bar
    buf := new(bytes.Buffer)
    json.NewEncoder(buf).Encode(bar)

    println(buf.String())
}
Copier après la connexion

Remarque : Cette approche repose sur la barre de types non exportée. L'utilisation de types non exportés permet d'éviter une utilisation accidentelle ailleurs dans la base de code. De plus, assurez-vous que les noms de champs, les types et l'ordre dans les deux structures correspondent exactement pour que le casting fonctionne correctement.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal