Sérialisation Json
Un format plus populaire pour partager des données est sans aucun doute le json. Créer des documents json en Java est aussi simple que la sérialisation binaire, avec comme bonus ajouté que le fichier sera entièrement lisible et portable.
Importer la dépendance
Contrairement à la sérialisation binaire, qui est inclue dans Java, la gestion des fichiers json est occupée par des librairies externes. Plusieurs librairies existent, mais celle choisie pour le cours est com.google.code.gson.
Pour importer la dépendance, il suffit de l'ajouter dans son fichier pom.xml
et de synchroniser les dépendances avec maven.

Écriture vers un fichier
L'écriture vers un fichier json est un peu différent que pour un fichier binaire.
- Il est important de spécifier le type de classe qui sera sérialisé. Dans l'exemple, c'est un ArrayList.
- Il est important de fermer le fichier, sinon de la corruption pourrait survenir.
Note
En sérialisation binaire, les classes anonymes pouvaient causer des problèmes de désérialisation. Aucun problème à les utiliser en json.
Lecture d'un fichier
La lecture d'un fichier json est aussi facile que pour un fichier binaire.
Important de noter que des arrays simples doivent être utilisés. On peut voir à la ligne 2 que ce n'est pas un ArrayList
qui sera utilisé, mais bien un array d'Etudiant
. Pour obtenir un ArrayList
, il faudrait le convertir :
Portabilité
La portabilité d'un fichier json n'est plus à démontrer. Ce simple fichier texte permet à n'importe qui de le lire aisément, en plus de pouvoir le transférer facilement vers n'importe quel autre langage :
[
{
"nom": "Tremblay",
"prenom": "Jean",
"noEtudiant": "123456",
"notes": {
"INF3135": 30.072731,
"INF1130": 73.662056,
"INF2120": 64.6835,
"INF1120": 65.3539,
"INF3143": 13.757491
}
},
{
"nom": "Gagnon",
"prenom": "Marie",
"noEtudiant": "654321",
"notes": {
"INF3135": 16.87798,
"INF1130": 50.10571,
"INF2120": 82.118996,
"INF1120": 7.8551474,
"INF3143": 74.37621
}
},
{
"nom": "Lavoie",
"prenom": "Pierre",
"noEtudiant": "456789",
"notes": {
"INF3135": 32.225983,
"INF1130": 18.357807,
"INF2120": 67.352066,
"INF1120": 70.130165,
"INF3143": 98.514565
}
}
]