Problema Quando si tenta di utilizzare Jackson in java
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
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.