2012-06-05 19 views
9

C'è un sacco informazioni a StackOverflow su come deserializzare una matrice JSON utilizzando GSON.deserializzare una matrice JSON utilizzando xstream

Ma come posso fare lo stesso utilizzando XStream con jettison?

Ecco JSON:

{"entity":[{"id":"1", "name":"aaa"}, {"id":"2", "name":"bbb"}]} 

Ecco XStream codice come cerco di analizzarlo:

XStream xstream = new XStream(new JettisonMappedXmlDriver()); 
xstream.alias("entity", Entity[].class); 
return (Entity[])xstream.fromXML(jsonString); 

Ho seguente eccezione:

com.thoughtworks.xstream.converters.ConversionException: id : id 
+1

Mi piace XStream molto. Puoi vedere che sono classificato come il sesto utente al tag di risposta XStream. Ho provato a risolvere il tuo problema usando XStream in tutti i modi a cui potevo pensare e ho fallito. C'è un altro filo messa in vendita di altre biblioteche di lavorare con JSON qui: http://stackoverflow.com/questions/5245840/how-to-convert-string-to-jsonobject-in-java. Mi dispiace! – pablosaraiva

+0

Sei riuscito a farlo funzionare? Hai provato: 'xstream.alias (" entity ", Entity.class);' con 'xstream.addImplicitCollection (Entity.class," entity ");' e utilizza un 'List' invece di un array? –

risposta

0

Con matrice non riesco a farlo funzionare, ma con una lista:

Java:

package de.mosst.spielwiese; 

import java.io.InputStream; 
import java.util.ArrayList; 
import java.util.List; 

import org.junit.Test; 

import com.thoughtworks.xstream.XStream; 
import com.thoughtworks.xstream.annotations.XStreamAlias; 
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver; 

import lombok.Data; 

public class XStreamDeserializeJsonWithJettison { 

    @Test 
    @SuppressWarnings("unchecked") 
    public void smokeTest() { 
     InputStream file = XStreamDeserializeJsonWithJettison.class.getResourceAsStream("XStreamDeserializeJsonWithJettison.json"); 
     XStream xStream = new XStream(new JettisonMappedXmlDriver()); 
     xStream.processAnnotations(Entity.class); 

     List<Entity> entities = (List<Entity>) xStream.fromXML(file); 
     System.out.println(entities); 
    } 

    @Data 
    @lombok.AllArgsConstructor 
    @XStreamAlias("entity") 
    class Entity { 
     String id; 
     String name; 
    } 
} 

XML:

{ 
    "list": [ 
     { 
      "entity": [ 
       { 
        "id": 1, 
        "name": "odin" 
       }, 
       { 
        "id": 2, 
        "name": "dwa" 
       } 
      ] 
     } 
    ] 
} 
0

Come si può vedere da this answer related to root elementXStream fallisce quando c'è non è un elemento radice in JSON.

Una volta mappato entità di certa classe Java xstream non riesce a trovare elemento principale per le coppie di id e nome (come in JSON non sono racchiusi tra elemento).

Solo involucro, manipolare flussi in entrata o utilizzando convertitore personalizzato può aiutare qui fatti a mano.

Problemi correlati