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

王林
王林avant
2024-02-12 18:20:06538parcourir

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"`
}
data = {
"user_id":<some bytes>,
"message":<some bytes>
}

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)

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)
}

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer