web-dev-qa-db-fra.com

Problème lors de l'utilisation de Jackson en Java

J'essaie d'utiliser Jackson pour convertir des données JSON en objets Java, une liste d'objets pour être précis, mais j'obtiens cette erreur:

org.codehaus.jackson.map.JsonMappingException: impossible de désérialiser l'instance de entitylayer.Detail en dehors du jeton START_ARRAY

c'est le code:

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

ld est la liste au format Json, c’est la partie qui me rend comfusé dans le tutoriel jackson . que signifie new File ("user.json") représente-t-il? J'ai supposé que c'était la chaîne au format JSON que je voulais convertir, c'est pourquoi j'ai utilisé ld .

J'espère que tu peux m'aider avec ça

19
eddy

À partir du tutoriel que vous avez lié (les autres collections fonctionnent de la même manière):

Donc, si vous souhaitez lier des données dans une carte, vous devez utiliser:

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

où TypeReference n'est nécessaire que pour passer la définition de type générique (via une classe interne quelconque dans ce cas): la partie importante est> qui définit le type auquel se lier.

Si vous ne le faites pas (et passez juste Map.class), appeler équivaut à une liaison à Map (c'est-à-dire une carte "non typée"), comme expliqué ci-dessus. 

Modifier:

Si vous insistez pour être nourri à la cuillère:

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

En tant que stratégie alternative, le traitement des tableaux est légèrement plus pratique, car vous pouvez facilement spécifier le type. Donc, alternativement, vous pouvez aussi faire ceci:

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

Les tableaux sont souvent sous-utilisés, du moins lorsqu'il s'agit de Jackson. Tant que vous n'avez pas besoin de trop modifier les résultats, ils sont très pratiques à utiliser, car les types sont bien contenus sans avoir besoin d'utiliser de génériques (et par conséquent, la sécurité des types est forte; il ne s'agit pas uniquement des problèmes de compilation).

11
StaxMan

Vous pouvez également analyser le JSON vous-même et créer les POJO que vous souhaitez créer. Je l'ai fait pour transformer JSON en JAXB.

Reportez-vous à la section "Exemple d'API de diffusion en continu" dans http://wiki.fasterxml.com/JacksonInFiveMinutes

C'est plus facile que vous ne le croyez.

0
Gautam

Chaque fois que vous obtenez cette erreur, vérifiez d'abord si la chaîne JSON que vous essayez de convertir est une chaîne JSON appropriée. Si vous essayez de créer votre propre chaîne JSON pour le test local de votre code, vous obtenez cette erreur.

0
user2319311