Heim > Backend-Entwicklung > Golang > Wie kann man leere verschachtelte Strukturen in Gos „json.Marshal' weglassen?

Wie kann man leere verschachtelte Strukturen in Gos „json.Marshal' weglassen?

DDD
Freigeben: 2024-12-09 07:49:05
Original
1022 Leute haben es durchsucht

How to Omit Empty Nested Structs in Go's `json.Marshal`?

Golang JSON Marshal: So lassen Sie leere verschachtelte Strukturen weg

In komplexen JSON-Codierungsszenarien kann es vorkommen, dass auch verschachtelte leere Strukturen codiert werden, obwohl sie weggelassen werden sollten aus Platz- und Effizienzgründen. Betrachten Sie beispielsweise den folgenden Codeausschnitt:

type ColorGroup struct {
    ID     int `json:",omitempty"`
    Name   string
    Colors []string
}
type Total struct {
    A ColorGroup `json:",omitempty"`
    B string     `json:",omitempty"`
}
Nach dem Login kopieren

Wenn json.Marshal für eine Instanz von Total mit einem leeren A-Feld verwendet wird, erscheint es weiterhin im Ausgabe-JSON:

group := Total{
    A: ColorGroup{},  // An empty ColorGroup instance
}

json.Marshal(group) // Output: {"A":{"Name":"","Colors":null},"B":null}
Nach dem Login kopieren

Das gewünschte Ergebnis besteht darin, das A-Feld vollständig wegzulassen:

{"B":null}
Nach dem Login kopieren

Lösung: Verwendung von Pointer Typen

Der Schlüssel zur Lösung dieses Problems liegt in der Verwendung von Zeigern. Wenn das A-Feld in Total als Zeiger deklariert ist, wird es automatisch auf Null gesetzt, wenn es nicht explizit zugewiesen wird, wodurch das Problem der leeren Strukturcodierung gelöst wird:

type ColorGroup struct {
    ID     int `json:",omitempty"`
    Name   string
    Colors []string
}
type Total struct {
    A *ColorGroup `json:",omitempty"`  // Using a pointer to ColorGroup
    B string     `json:",omitempty"`
}
Nach dem Login kopieren

Mit dieser Änderung wird die json.Marshal-Ausgabe wird nun das leere A-Feld korrekt weglassen:

group := Total{
    B: "abc",  // Assigning a value to the B field
}

json.Marshal(group) // Output: {"B":"abc"}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann man leere verschachtelte Strukturen in Gos „json.Marshal' weglassen?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage