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"` }
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}
Das gewünschte Ergebnis besteht darin, das A-Feld vollständig wegzulassen:
{"B":null}
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"` }
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"}
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!