Maison > développement back-end > Golang > Réunifier les octets de données partiels dans une structure personnalisée

Réunifier les octets de données partiels dans une structure personnalisée

王林
Libérer: 2024-02-12 18:20:06
avant
540 Les gens l'ont consulté

Réunifier les octets de données partiels dans une structure personnalisée

Contenu de la question

J'ai des données sous la forme de map[string][]byte, où key est la balise de champ json de la structure et value est la tranche d'octets.

Considérez cet exemple :

type Tweet struct {
    UserId int `json:"user_id"`
    Message string `json:"message"`
}
Copier après la connexion
data = {
"user_id":<some bytes>,
"message":<some bytes>
}
Copier après la connexion

var t Tweet

Comment désorganiser les données de champ correspondantes dans une structure Tweet, qui peut contenir des champs de n'importe quel type, c'est-à-dire des tranches/cartes/types personnalisés/types de pointeurs ? Dois-je mapper les données de chaque champ individuellement une par une ou existe-t-il une méthode générale ?

J'ai essayé de rassembler toutes les données et de les désorganiser dans un type struct, mais il semble que cela modifie en interne les données réelles et ne fonctionne pas.

bytes, err := json.Marshal(data)
var t Tweet
err = json.Unmarshal(bytes,&t)
Copier après la connexion

Solution de contournement

Je pense que vous n'avez pas mentionné votre erreur, mais ce qui suit a fonctionné pour moi. Vous pouvez essayer ceci.

package main

import (
    "encoding/json"
    "fmt"
)

type Tweet struct {
    UserId  int    `json:"user_id"`
    Message string `json:"message"`
}

func main() {
    // Example data: map of field tags to JSON-encoded byte slices
    data := map[string]json.RawMessage{
        "user_id": []byte(`123`),             // Encoded as a JSON number
        "message": []byte(`"Hello, world!"`), // Encoded as a JSON string
    }

    // Convert map to JSON
    jsonData, err := json.Marshal(data)
    if err != nil {
        fmt.Println("Error marshalling map to JSON:", err)
        return
    }

    // Unmarshal JSON into Tweet struct
    var t Tweet
    if err := json.Unmarshal(jsonData, &t); err != nil {
        fmt.Println("Error unmarshalling JSON:", err)
        return
    }

    // Output the result
    fmt.Printf("Unmarshalled: %+v\n", t)

    // Marshal the Tweet struct back into JSON
    marshalledData, err := json.Marshal(t)
    if err != nil {
        fmt.Println("Error marshalling Tweet struct to JSON:", err)
        return
    }

    // Output the marshalled JSON
    fmt.Printf("Marshalled: %s\n", marshalledData)
}
Copier après la connexion

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:stackoverflow.com
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