2016-08-31 2 views
0

Ich habe Probleme beim Ausschließen von Null/Empty-Eigenschaften, wenn ich meine ObjectNode wieder in eine Zeichenfolge serialisieren. Ich googelte herum und alle Referenzen über JsonInclude.Include.NON_NULL betreffen Serialisierung und Deserialisierung von einem Bean, kein ObjectNode - Es scheint, dass sich die Serialisierung anders verhält als ein "beliebiger" ObjectNode anstelle eines vordefinierten Bean.Jackson ObjectNode: wie NULL bei Serialisierung nicht enthalten

Mein Ziel ist es, die Ausgabe haben = { "name": "myName"}, nicht { "name": "myName", "nu": null, "empt": ""}

import com.fasterxml.jackson.annotation.JsonInclude 
import com.fasterxml.jackson.databind.node.ObjectNode 
import com.fasterxml.jackson.databind.ObjectMapper 

val jsonInputStr = """{"name": "myName"}""" 
val newObjMapper = new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_EMPTY) 

val json = newObjMapper.readTree(jsonInputStr).asInstanceOf[ObjectNode] 
json.put("nu", null.asInstanceOf[String]) 
json.put("empt", "") 
val str = newObjMapper.writeValueAsBytes(json) 
println(s"OUTPUT = ${new String(str)}") 

druckt: OUTPUT = { "name": "myName", "nu": null, "empt": ""}

Antwort

0

Wenn Sie die JSON in einen Map anstelle eines deserialisieren JsonNode Struktur, wenn Sie die Karte re-serialisieren, wird es die Serialisierung inclusio folgen n Parameter.

Kommentar bearbeiten Adresse:

Wenn Sie die Knotenstruktur verwendet werden soll und keine leichten Performanceverlust zu tun, mehrere Serialisierung Schritte dagegen haben, dann könnte man immer etwas tun:

val rootNode = objectMapper.readTree(...) 
... 
val map = objectMapper.treeToValue(rootNode, Map::class) 
val json = objectMapper.writeValueAsString(map) 
+0

Eine große verschachtelte Karte (mein tatsächliches Json-Objekt ist sehr verschachtelt mit vielen verschiedenen Typen)? Jawohl. Hatte wirklich gehofft, dass diese Funktion auf einem ObjectNode oder JsonNode funktionieren könnte und nur meine Syntax ist falsch. Sie haben es bereits eindeutig für Beans hinzugefügt, und der objectMapper durchquert den gesamten Baum Knoten für Knoten, sollte für sie einfach das Feature bereitgestellt haben. ... es scheint, dass nicht viele Leute den veränderbaren ObjectNode verwenden. –

+0

Ich habe meine Antwort bearbeitet eine Lösung zur Verfügung stellen, die Sie Ihre Domain-Logik auf dem Knoten (wenn auch Art der hässlichen Serialisierung) tun können. –

Verwandte Themen