Remplir un array d'instances à partir d'un JSON

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Salut à tous,

Je dois manipuler un fichier JSON dont voici un petit extrait :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
{ "Personnes": [

      { "identite": { "nom": "dupond", "prenom": "thomas"},
        "sexe":"homme",
        "date naissance": "08/10/66",
        "adresse": "3 rue du port",
        "ville":"Vannes",
        "pays":"France",
        "lectures":[1, 2]
       }, ...
   ],

  "Livres": [
      { "cle":"1",
         "titre":"Le Monde selon Garp",
         "auteur":"John Irving",
         "annee":"84"
      },
      ...
  ]
}

Il s'agit donc d'un objet sans nom contenant deux arrays (Personnes et Livres) d'objets.

J'ai besoin d'utiliser ce fichier JSON en Java, avec l'API Jackson, afin de remplir une ArrayList<Personne> (et une structure de données similaire pour Livres, bref).

C'est la première fois que j'utilise Jackson, aussi j'ai fait quelques recherches sur Google pour savoir comment remplir mon ArrayList<Personne> avec des instances de Personne créées par Jackson. J'en suis venu à écrire cette ligne de code :

1
 ArrayList<Personne> personne = mapper.readValue(new File("testjson.json"), new TypeReference<ArrayList<Personne>>(){});

Or j'ai ce message d'erreur à la compilation :

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token at [Source: testjson.json; line: 1, column: 1]

Je suppose que c'est parce que je dis à Jackson "Ouvre testjson.json, et remplis l'ArrayList<Personne> avec son contenu". Or le souci est que ce fichier ne contient pas juste un array Personnes, mais bien un objet contenant l'array Personnes et l'array Livres.

Du coup comme c'est la première fois que je touche à Jackson, je suis un peu perdu et ne vois pas trop comment me dépatouiller de cette situation… Serait-il possible que quelqu'un de familier à cette API m'aide s'il vous plaît ? :)

Merci d'avance !

Bonne journée !

Édité par The-Aloha-Protocol

Université de Bretagne-Sud <3

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

Bonjour,

Pour ce souci, j'aurai procédé de la manière suivante :

Créer une classe qui me servira pour mapper le contenu de mon json en memoire
1
2
3
4
public class Study {
    List<Personne> Personnes;
    List<Livre> Livres;
}

En supposant que tu as déjà crée les classes Personne et Livre qui vont bien.

Il te suffit de charger tout ça via:

1
Study study= mapper.readValue(new File("testjson.json"), Study.class);

Tu aura donc accès à tes deux listes de personnes et livres via study

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte