2016-07-21 11 views
2

ich ein REST Web Services am raubend mit REST-Vorlage in meinem Projekt, das wie unten ein JSON zurückgibt:coverting JSON String, die einen Teil von JSON-Objekt JSON-Objekt auf der Flucht ist

{"data": [{ 
     "id": "INT-1468819244684-event-no-97", 
     "object1": { 
      "JSONString": "{\"object2\":[{\"object3\":\"value3\",\"object4\":\"value4\"}]}" 
     } 
    }] 

}

Während ich die obige JSON-Antwort konsumiere, kann ich eine Bean-Klasse erstellen und JSON-Objekte/Werte in denselben ausgeben.

Aber das Problem ist oben json Antwort als unten eine Zeichenfolge enthält:

"JSONString": "{\"object2\":[{\"object3\":\"value3\",\"object4\":\"value4\"}]}" 

die eigentlich eine json ist. Ich habe also eine Bean, in der ich JSONString als String abholen kann. Also zur Zeit kann ich unter Bohne Struktur verwenden Antwort in Objekte zu holen:

public class response { 
Data data; 
} 

public class Data { 
String id; 
Object1 object1; 
} 

public class Object1 { 
String jsonString; 
} 

Aber oben jsonString enthält eine Zeichenfolge in Form von json, so möchte ich irgendwie dieses JSON String konvertieren nur JSON-Objekt zur Laufzeit, wenn Andere Objekte werden erstellt und alle Inhalte werden in derselben Bean gespeichert, damit die Anwendung ihren Inhalt verwenden kann. Also idealerweise sollte meine Bohnenhierarchie so etwas wie unten sein:

public class response { 
Data data; 
} 

public class Data { 
String id; 
Object1 object1; 
} 


public class Object1 { 
JSONString jsonString; 
} 

public class JSONString { 
Object2 object2; 
} 

public class Object2 { 
String object3; 
String object4; 
} 

Bitte führen Sie mich, wie Sie das gleiche tun.

+0

Der letzte Absatz wirklich unklar ist. Könnten Sie [bearbeiten], um Ihre Bean zu zeigen, und was Sie versuchen zu tun? – 4castle

+0

@ 4castle Ich werde es versuchen. Sie haben ein Schlüsselwertpaar, wobei der Wert eine JSON-Zeichenfolge ist, deren Inhalt für den Zeichenfolgenwert ein JSON-Objekt ist. Sie möchten die Deserialisierung vornehmen, als wäre das JSON-Objekt der Wert von kvp anstelle der JSON-Zeichenfolge, d. '{" object2 ": [{" object3 ":" wert3 "," objekt4 ":" wert4 "}]}' –

+0

@SotiriosDelimanolis Danke! Ok, ich verstehe es jetzt. – 4castle

Antwort

3

Sie können Jackson ObjectMapper.readValue auf diese Weise verwenden:

// Create or use your existing ObjectMapper 
ObjectMapper om = new ObjectMapper(); 

@JsonProperty("JSONString") 
public String getJSONString() { 
    if (this.jsonString == null) 
     return null; 
    return om.writeValueAsString(this.jsonString); 
} 

public void setJSONString(String s) { 
    this.jsonString = om.readValue(s, JSONString.class); 
} 
+0

Wie löst dies ihr Problem eines doppelt codierten JSON-Objekts als JSON-String? –

+0

Sie können die Setter auf diese Weise aktualisieren: '' ' @JsonProperty ("JSONString") public String getJSONString() { if (this.jsonString == null) { return null; } Rückgabe om.writeValueAsString (this.jsonString); } public setJsonString (Zeichenfolge jsonString) { this.jsonString = om.readValue (jsonString, JSONString.class); } '' ' –

+0

Bitte bearbeiten Sie das in Ihrer Antwort und erklären Sie, warum es für ihr Problem relevant ist. –

Verwandte Themen