Go JSON Omitempty-Nutzung (JSON Omitempty)

Go Json Omitempty Nutzung Json Omitempty



JSON ist wahrscheinlich eines der beliebtesten Datenaustauschformate der Moderne. Es ist sehr einfach, aber dennoch leistungsstark und vielseitig, um die umfangreichen Anwendungen und API-Endpunkte zu betreiben.

Es besteht daher kein Zweifel daran, dass die Arbeit mit JSON in Sprachen wie Go weit verbreitet ist. Bei der Serialisierung von Strukturen in JSON-Objekte und umgekehrt müssen wir jedoch häufig die Felder steuern, die wir in die Ausgabe einschließen möchten.

Hier kommt das Attribut oder Tag „omitempty“ ins Spiel. Dadurch können wir dem Compiler mitteilen, dass er keine Felder einbeziehen soll, die leer sind oder einen Nullwert haben.







In diesem Tutorial untersuchen wir die Funktionsweise dieses Tags und wie es uns bei der Serialisierung und Deserialisierung der JSON-Daten in der Go-Sprache helfen kann.



Was ist Omitempty?

„omitempty“ ist ein Strukturfeld-Tag, das wir in Kombination mit dem Paket „encoding/JSON“ verwenden können, um die Serialisierung von Go-Strukturfeldern in JSON-Objekte zu steuern.



Wenn der JSON-Encoder auf das Feld-Tag „omitempty“ in einer Struktur stößt, lässt er das Feld aus der JSON-Ausgabe weg, wenn es einen leeren Wert oder eine Null enthält.





Dies ist besonders nützlich, wenn wir prägnantere JSON-Darstellungen erstellen oder unnötige Daten herausfiltern möchten.

Verwenden Sie das Omitempty-Tag in Golang

Lassen Sie uns untersuchen, wie Sie das Tag „omitempty“ in einer Go-Struktur verwenden.



Wir können damit beginnen, eine Struktur zu definieren und das Tag hinzuzufügen, wie in der folgenden Syntax gezeigt:

Feld Typ 'json:'field,omitempty''

Zum Beispiel:

Typ Auto Struktur {
Modell Zeichenfolge 'json:'model''
Jahr int 'json:'year,omitempty''
Kilometerstand int 'json:'mileage,omitempty''
}

In diesem Fall definieren wir eine Struktur namens „Car“ mit drei Hauptfeldern. „Year“ und „Mileage“ enthalten das Tag „omitempty“, das es dem Encoder ermöglicht, sie als gültiges JSON in der Ausgabe zu verwerfen, wenn sie 0 oder eine leere Zeichenfolge enthalten.

Codieren Sie eine Struktur in JSON

Um eine Instanz der Struktur mit omitempty-Behandlung in JSON zu kodieren, können wir die Funktion „json.Marshal“ aus dem Paket „encoding/JSON“ verwenden.

Paket main
importieren (
„Kodierung/json“
„fmt“
)

Typ Auto Struktur {
Modell Zeichenfolge 'json:'model''
Jahr int 'json:'year,omitempty''
Kilometerstand int 'json:'mileage,omitempty''
}
Funktion main ( ) {
Auto : = Auto {
Modell: „Audi“ ,
Jahr: 0 ,
Kilometerstand: 200 ,
}
jsonData , irren : = json. Marshall ( Auto )
Wenn irren != Null {
fmt. Druckenln ( 'Fehler:' , irren )
zurückkehren
}
fmt. Druckenln ( Zeichenfolge ( jsonData ) )

}

Da in diesem Fall das Feld „Jahr“ den Wert 0 hat, wird es in der JSON-Ausgabe weggelassen, wie im folgenden Beispiel gezeigt:

{ 'Modell' : „Audi“ , 'Kilometerstand' : 200

Dekodieren Sie JSON-Daten in eine Struktur

Um JSON-Daten in eine Go-Struktur mit omitempty-Behandlung zu dekodieren, können wir die Funktion „json.Unmarshal“ aus dem Paket „encoding/JSON“ verwenden.

Ein Beispiel ist wie folgt:

Paket main
importieren (
„Kodierung/json“
„fmt“
)
Typ Auto Struktur {
Modell Zeichenfolge 'json:'model''
Jahr int 'json:'year,omitempty''
Kilometerstand int 'json:'mileage,omitempty''
}
Funktion main ( ) {
jsonStr: = '{'model':'Audi','year':0,'mileage':200}'
war Auto Auto
irren : = json. Unmarshal ( [ ] Byte ( jsonStr ) , &Auto )
Wenn irren != Null {
fmt. Druckenln ( 'Fehler:' , irren )
zurückkehren
}
fmt. Druckenf ( „Modell: %s, Jahr: %d, Kilometerstand: %d \N ' , Auto. Modell , Auto. Jahr , Auto. Kilometerstand )
}

Wenn in diesem Beispiel die JSON-Daten kein „Jahr“-Feld enthalten, wird das „Jahr“-Feld in der „Auto“-Struktur auf eine leere Zeichenfolge gesetzt. Dadurch können wir die optionalen Felder ordnungsgemäß verarbeiten.

Leere Slices und Maps weglassen

Wir können die Leer- oder Nullwertfilterung auch in einem Slice oder einer Karte einer bestimmten Struktur anwenden, wie im folgenden Beispiel gezeigt:

Paket main

importieren (
„Kodierung/json“
„fmt“
)

Typ Auto Struktur {
Modell Zeichenfolge 'json:'model''
Farbe Zeichenfolge 'json:'color''
Merkmale [ ] Zeichenfolge 'json:'features,omitempty''
Attribute Karte [ Zeichenfolge ] Zeichenfolge 'json:'attributes,omitempty''
}

Funktion main ( ) {
Auto : = Auto {
Modell: 'Toyota Camry' ,
Farbe: 'Silber' ,
Merkmale: [ ] Zeichenfolge { 'GEOGRAPHISCHES POSITIONIERUNGS SYSTEM' , 'Ledersitze' } ,
Attribute: machen ( Karte [ Zeichenfolge ] Zeichenfolge ) ,
}

jsonData , _: = json. Marshall ( Auto )
fmt. Druckenln ( Zeichenfolge ( jsonData ) )
}

Die resultierende Zeichenfolge lautet wie folgt:

{ 'Modell' : 'Toyota Camry' , 'Farbe' : 'Silber' , 'Merkmale' : [ 'GEOGRAPHISCHES POSITIONIERUNGS SYSTEM' , 'Ledersitze' ] }

Sie werden feststellen, dass das Tag „omitempty“ die Attributzuordnung anwendet, die die leeren Werte enthält und daher nicht in der resultierenden JSON-Zeichenfolge enthalten ist.

Abschluss

In diesem Tutorial haben wir alles über das „omitempty“-Tag in Go-Strukturen gelernt, damit wir jedes Feld ausschließen können, das eine leere Zeichenfolge mit dem Wert Null in der resultierenden JSON-Zeichenfolge enthält und umgekehrt.