2011-11-15 33 views
6

Quiero usar XStream para convertir un hash de Java a un hash json. Siento que esto debería ser más fácil de lo que parece. Lo que estoy buscando es una manera de hacer:Java XStream con HashMap

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

convierten

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

La cierra Tengo la convierte en una serie de matrices.

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

xstream.toXML(map); 

que se convierte en

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

me siento como la conversión de un hash de Java para JSON de hash debe ser sencillo. ¿Me estoy perdiendo de algo?

+1

puede ser usted puede elegir otro lib, consulte http://json-lib.sourceforge.net/apidocs/jdk15/net/sf/json/JSONObject.html. – Jason

Respuesta

0

Tuve problemas similares al convertir a jSon. Mi solución a este problema fue tener la cadena ya formateada en JSon antes de colocarla en el archivo (en mi caso una base de datos). El proceso más eficiente que he tenido hasta ahora fue crear una función toJson dentro de mis clases para que funcione como toString.

Ejemplo:

Convierte la cadena de salida objetos de datos en formato JSON

public JsonObject toJson() 
    { 

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

Así que para usted, implementar un proceso similar al rellenar su mapa.

1

La cuestión es que XStream está diseñado principalmente para reunir y desarticular objetos de Java en XML, JSON es solo una idea de último momento, sin duda tiene el soporte menos elegante.

El problema técnico es que, como XStream debe admitir formatos XML y JSON, la representación de mapas JSON sufre, ya que no existe una forma nativa de representar estructuras similares a un mapa en XML.

0

Puede intentar utilizar el json lib "oficial" para java desde json.org.

Calling:

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