2016-11-23 3 views
1

Ich muss alle JSON-Daten (um sie zu speichern, log, Rückgabe), aber ich werde nie auf sie aus Code zugreifen. Gibt es eine Möglichkeit, die Deserialisierung zu vermeiden, sie aber dennoch während der Serialisierung zu verwenden?Jackson: vermeiden Deserialisierung von einigen Feldern, aber nicht ignorieren

class MyObject {  
    int importantField; // i want this field to be properly deserialized 
    String notImportantJsonGarbage; // i don't care what's here. it must be a valid json 
} 

So, jetzt möchte Ich mag es deserialisieren von

{"importantField":7, "notImportantJsonGarbage":{"key1":3, "key2":[1,2,3]}} 

und es

UPDATE

ich tun, nicht auf die gleiche Zeichenfolge später in der Lage sein serialisiert möchte diese Eigenschaft ignorieren. Ich brauche diese Daten. aber als String, nicht vollständig deserialisiert Objekt

i müssen in der Lage sein zu tun:

json1 -> object -> json2 
json1 == json2 
+0

Versuchen Sie JSONObject Art mit, wie ich in meiner Antwort erwähnt habe? Ich denke, das löst dein Problem. Sie können das in ein JSON-Objekt einlesen und es nur bei Bedarf deserialisieren. – gaganbm

Antwort

2

Werfen Sie einen Blick auf: JsonProperty.Access

  • AUTO - Zugang Einstellung der bedeutet, dass Sichtbarkeitsregeln verwendet werden, um den Lese- und/oder Schreibzugriff von auf diese Eigenschaft automatisch zu bestimmen.

  • READ_ONLY - Zugangseinstellung, die bedeutet, dass die Eigenschaft nur für die Serialisierung gelesen werden kann, aber nicht geschrieben (set) während
    Deserialisierung.

  • READ_WRITE - Zugriffseinstellung, die bedeutet, dass die Eigenschaft für beide Serialisierung zugegriffen werden (Schreib out-Wert als externe Darstellung) und Deserialisierung, unabhängig von Sichtbarkeitsregeln (Werte von
    externer Darstellung zu lesen).

  • WRITE_ONLY - Zugangseinstellung, die bedeutet, dass die Eigenschaft nur (set) geschrieben werden kann, für die Deserialisierung, wird aber nicht gelesen werden (get) auf der Serialisierung, das heißt, der Wert der Immobilie nicht enthalten ist in Serialisierung.

in Ihrem Fall So könnte man es wie folgt verwenden:

@JsonProperty(access = Access.READ_ONLY) 
private String notImportantJsonGarbage; 
+0

aber auf diese Weise 'notImportantJsonGarbage' ist' null'. daher fehlen Informationen und meine Anforderung ** und später serialisieren sie auf den gleichen String ** ist nicht erfüllt – piotrek

0

Sie den Typ JSONObject für das Json Feld verwenden können.

private JSONObject notImportantJsonGarbage; 

Und wenn Sie das lesen müssen, können Sie es in einen String (oder einen anderen Typ) konvertieren. Sie können dazu die Bibliotheken jackson oder gson verwenden.

Beachten Sie, dass beim Konvertieren der JsonObject zurück zu String die resultierende Zeichenfolge möglicherweise die Anführungszeichen mit Escapezeichen hat.

Die Verwendung von JSONObject löst auch Ihre Anforderung von 'muss ein gültiges Json-Objekt sein'.

0

können Sie Annotations verwenden @JsonIgnore über die Eigenschaft, die Sie ignorieren mögen

Verwandte Themen