Teildatenbytes in eine benutzerdefinierte Struktur entpacken

王林
Freigeben: 2024-02-12 18:20:06
nach vorne
519 Leute haben es durchsucht

Teildatenbytes in eine benutzerdefinierte Struktur entpacken

Frageninhalt

Ich habe Daten in der Form map[string][]byte, wobei Schlüssel das JSON-Feld-Tag der Struktur und Wert das Byte-Slice ist.

Betrachten Sie dieses Beispiel:

type Tweet struct {
    UserId int `json:"user_id"`
    Message string `json:"message"`
}
Nach dem Login kopieren
data = {
"user_id":<some bytes>,
"message":<some bytes>
}
Nach dem Login kopieren

var t Tweet

Wie entmarshaliere ich die entsprechenden Felddaten in eine Tweet-Struktur, die Felder jeden Typs enthalten kann, d. h. Slices/Maps/benutzerdefinierte Typen/Zeigertypen? Muss ich die Daten jedes Felds einzeln einzeln zuordnen oder gibt es eine allgemeine Möglichkeit?

Ich habe versucht, die gesamten Daten zu Marshallen und wieder in einen Strukturtyp zu entmarshallen, aber es scheint, als würde es die tatsächlichen Daten intern ändern und nicht funktionieren.

bytes, err := json.Marshal(data)
var t Tweet
err = json.Unmarshal(bytes,&t)
Nach dem Login kopieren

Workaround

Ich glaube, Sie haben Ihren Fehler nicht erwähnt, aber das Folgende hat bei mir funktioniert. Sie können dies versuchen.

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)
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonTeildatenbytes in eine benutzerdefinierte Struktur entpacken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage