Gson ignoriert Karteneinträge mit dem Wert = null

132
Gson gson = new Gson();

Map<String,Object> map = new HashMap<String, Object>();
map.put("a", 1);
map.put("b", null);

System.out.println(gson.toJson(map)); //prints {"a":1}

Wie kann ich alle Einträge einschließen?

m2o
quelle

Antworten:

299

Siehe Gson-Benutzerhandbuch - Null-Objekt-Unterstützung :

Das in Gson implementierte Standardverhalten ist, dass Nullobjektfelder ignoriert werden. Dies ermöglicht ein kompakteres Ausgabeformat. Der Client muss jedoch einen Standardwert für diese Felder definieren, da das JSON-Format wieder in seine Java-Form konvertiert wird.

So würden Sie eine Gson-Instanz für die Ausgabe von null konfigurieren:

Gson gson = new GsonBuilder().serializeNulls().create();
Alois Cochard
quelle
10
Das Handbuch sollte für die Suche optimiert sein. Ich werde nicht alles lesen, wenn ich eine kleine Menge Kunststücke benutze. Dies war das erste Ergebnis bei Google. Mein Problem wurde behoben.
Mathijs Segers
1
@MathijsSegers Einige der fantastischen Bibliotheken sind ohne Dokumentation. Es gibt so viele Probleme beim Durchsuchen des Quellcodes (was wiederum viele Builder-Muster und alles enthält).
Pinkpanther
13
@MathijsSegers Und das ist das Schöne an SO und Google. Ich kann "gson ignore null" googeln und diese Antwort in 3 Sekunden finden, anstatt das Handbuch und eine Antwort darin finden zu müssen.
Joshden
2
Wie kann man nur ein NULL-Feld und nicht alle NULL-Felder in die Klasse aufnehmen? Gibt es eine Anmerkung, die ich über dem erforderlichen Feld hinzufügen kann?
Salam El-Banna
Diese Lösung scheint vernünftig und ich habe erwartet, dass es funktioniert! aber das tut es nicht! irgendwelche Ideen?
Arman Ramezanzadeh