Heim > Backend-Entwicklung > Golang > Wie kann ich JSON in Go teilweise dekodieren und aktualisieren und dabei unbekannte Felder beibehalten?

Wie kann ich JSON in Go teilweise dekodieren und aktualisieren und dabei unbekannte Felder beibehalten?

Patricia Arquette
Freigeben: 2024-12-31 10:28:10
Original
487 Leute haben es durchsucht

How Can I Partially Decode and Update JSON in Go While Preserving Unknown Fields?

Teilweise Dekodierung und Aktualisierung von JSON in Go

Bei der Arbeit mit JSON-Objekten kann es erforderlich sein, nur bestimmte Werte zu dekodieren und unbekannte Werte beizubehalten Teile des Objekts. Das Paket „encoding/json“ in Go tendiert jedoch dazu, Felder abzuschneiden, die nicht in der Struktur vorhanden sind, was bei der Neucodierung zu Datenverlust führt.

Eine Lösung

Zu Um dieses Problem zu lösen, kann eine Kombination aus einer einfachen Struktur und json.RawMessage verwendet werden, um unbekannte Felder beizubehalten.

type Color struct {
    Space string
    raw   map[string]json.RawMessage
}
Nach dem Login kopieren

Hier struct speichert das Rohfeld das gesamte JSON-Objekt als RawMessage. Beim Dekodieren liest die UnmarshalJSON-Methode das Rohfeld, um bestimmte Werte in die definierten Felder der Struktur zu extrahieren.

func (c *Color) UnmarshalJSON(bytes []byte) error {
    if err := json.Unmarshal(bytes, &c.raw); err != nil {
        return err
    }
    if space, ok := c.raw["Space"]; ok {
        if err := json.Unmarshal(space, &c.Space); err != nil {
            return err
        }
    }
    return nil
}
Nach dem Login kopieren

Ähnlich serialisiert die MarshalJSON-Methode beim Kodieren das Space-Feld und aktualisiert die Rohkarte mit den kodierten Bytes .

func (c *Color) MarshalJSON() ([]byte, error) {
    bytes, err := json.Marshal(c.Space)
    if err != nil {
        return nil, err
    }
    c.raw["Space"] = json.RawMessage(bytes)
    return json.Marshal(c.raw)
}
Nach dem Login kopieren

Dieser Ansatz ermöglicht die teilweise Dekodierung und Aktualisierung bestimmter Felder, während die unbekannten Teile davon erhalten bleiben JSON-Objekt.

Das obige ist der detaillierte Inhalt vonWie kann ich JSON in Go teilweise dekodieren und aktualisieren und dabei unbekannte Felder beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage