2011-11-15 16 views
6

Voglio usare XStream per convertire un hash java in un hash json. Credo che questo dovrebbe essere più facile di quanto sembri. Quello che sto cercando è un modo per rendere:Java XStream con HashMap

Map<String, String> map = new HashMap<String, String>(); 
map.put("first", "value1"); 
map.put("second", "value2"); 

diventano

{'first' : 'value1', 'second' : 'value2' } 

Il chiude ho lo converte in una serie di array.

XStream xstream = new XStream(new JettisonMappedXmlDriver() { 
    public HierarchicalStreamWriter createWriter(Writer writer) { 
     return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE); 
    } 
}); 

xstream.toXML(map); 

che diventa

[["first", "value1"], ["second", "value2"]] 

mi sento come la conversione di un hash Java a JSON hash dovrebbe essere semplice. Mi sto perdendo qualcosa?

+1

Può essere che si può scegliere un'altra lib, fare riferimento a http://json-lib.sourceforge.net/apidocs/jdk15/net/sf/json/JSONObject.html. – Jason

risposta

0

Ho avuto problemi simili durante la conversione in jSon. La mia soluzione a questo problema era di avere la stringa già formattata su JSon prima di cadere nel file (nel mio caso un database). Il processo più efficiente che ho escogitato finora è stato quello di creare una funzione toJson all'interno delle mie classi per funzionare proprio come toString.

Esempio:

Converte la stringa di output oggetti dati in formato JSON

public JsonObject toJson() 
    { 

     JsonObject temp = new JsonObject(); 
     temp.addProperty(tagName,floatData); 
     return temp; 
    } 

Quindi per voi, implementare un processo simile durante il popolamento mappa.

1

Il fatto è che XStream è prima di tutto progettato per il marshalling e gli oggetti Java non rari in XML, JSON è solo un ripensamento, ha sicuramente il supporto meno elegante.

Il problema tecnico è che come xstream deve supportare entrambi - i formati XML e JSON, JSON mappa rappresentazione soffre, in quanto non v'è alcun modo nativo per rappresentare una mappa-come le strutture in XML.

0

Si può provare a utilizzare "json lib" ufficiale per java da json.org.

Calling:

JSONObject jsobj = new JSONObject(map); 
String strJson = jsobj.toString();