2015-02-21 15 views
19

Ho la seguente JSON:veloce XML Jackson: Rimuovere le virgolette

{"test":"example"} 

Io uso il seguente codice XML più veloce Jackson.

JsonParser jp = factory.createParser("{\"test\":\"example\"}"); 
json = mapper.readTree(jp); 
System.out.println(json.get("test").toString()); 

Produce:

"example" 

È ci una regolazione a Jackson per rimuovere le virgolette?

risposta

34

Bene, ciò che si ottiene quando si .get("test") è un JsonNode e capita di essere un TextNode; quando lo si sostituisce con lo standard .toString(), verrà restituita la rappresentazione di stringa di tale TextNode, motivo per cui si ottiene tale risultato.

quello che vuoi è a:

.get("test").textValue(); 

che restituirà il contenuto effettivo del JSON stringa stessa (con tutto ciò senza caratteri di escape e così via).

Si noti che questo restituirà null se il JsonNodenon è a TextNode.

+1

E più in generale, 'JsonNode.toString()' non dovrebbe essere usato per qualcosa di diverso di debug o risoluzione dei problemi: non è (per esempio) appropriata per la serializzazione. Anziché. objectMapper.writeValueAsString (node) è il modo corretto e gestisce tutti gli aspetti di escape/quoting, usando la configurazione del mapper, il possibile indentation. – StaxMan

4

Semplice ternario generico per utilizzare il testo non quotato, altrimenti mantenere il nodo intatto.

node.isTextual() ? node.asText() : node 
+0

Questo ha funzionato. Nel caso in cui si desideri che il nodo venga stampato come una stringa con testo non quotato, l'ultima parte del ternario può essere mappata su una stringa usando 'objectMapper.writeValueAsString (node)' – skidev20

Problemi correlati