Domanda

Sto cercando di utilizzare Jackson a convertire alcuni dati JSON in oggetti Java, un elenco di oggetti per la precisione, ma ottengo questo errore:

org.codehaus.jackson.map.JsonMappingException: Impossibile deserializzare istanza di entitylayer.Detail fuori START_ARRAY gettone

Questo è il codice:

 ObjectMapper mapper = new ObjectMapper(); 
 List<Detail> lcd = (List<Detail>) mapper.readValue(ld, Detail.class);

ld è la lista in formato JSON, questa è la parte che mi fa comfused nel Jackson esercitazione . ciò che nuovo file ( "user.json") rappresentare? Ho pensato che fosse la stringa in formato JSON ho voluto convertire, è per questo che ho usato ld .

Spero che mi può aiutare con esso

È stato utile?

Soluzione

Dal esercitazione si è collegato (Altre collezioni funzionano allo stesso modo):

  

Quindi, se si vuole impegnare i dati in una mappa sarà necessario utilizzare:

Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
     

dove TypeReference è necessaria solo per passare definizione di tipo generico (tramite classe interna anynomous in questo caso): la parte importante è> che definisce il tipo di binding a

.      

Se non si esegue questa operazione (e solo passare Map.class), chiamata equivale a legame Map (vale a dire "non tipizzato" Map), come spiegato sopra.

Modifica:

Se ti ostini a essere alimentato cucchiaio:

List<Detail> lcd = mapper.readValue(ld, new TypeReference<List<Detail>>() {});

Altri suggerimenti

In una strategia alternativa, trattare con gli array è leggermente più conveniente, perché si può facilmente specificare il tipo. Quindi, in alternativa, si potrebbe anche fare questo:

Detail[] details = mapper.readValue(ld, Detail[].class);

Gli array sono spesso sottoutilizzate, almeno quando si tratta di Jackson. Finché non c'è bisogno di modificare i risultati troppo sono molto comodo da usare, in quanto i tipi sono ben contenuti senza bisogno di usare farmaci generici (e come risultato, tipo di sicurezza è forte, non è solo fluff compilatore)

In alternativa analizzare il JSON se stessi e creare qualsiasi POJO si desidera creare. L'ho fatto a trasformare JSON per JAXB.

Fare riferimento alla sezione "Streaming API Esempio" all'indirizzo http://wiki.fasterxml.com/JacksonInFiveMinutes

La sua più facile di quanto ci si aspetta che sia.

Ogni volta che si ottiene questo errore, prima verifica se la stringa JSON si sta tentando di convertire in una stringa JSON corretta. Se si tenta di creare il proprio stringa JSON per testare il codice locale, allora si finisce in questo errore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top