Dans ce bref billet, nous allons voir quelques méthodes pour bien utiliser et sauvegarder vos fichiers JSON en PHP.

C’est quoi JSON ?

JSON pour JavaScript Object Notation est un format léger d’échange de données, plus ou moins facile à lire pour les humains mais aisément analysable par une machine. Il a l’avantage de pouvoir être utilisé sous de nombreux langages, comme C, Perl, Python mais surtout PHP et Javascript.

Autrement dit, c’est un format textuel qui permet, comme XML ou Yaml , de stocker et d’échanger des informations, notamment avec Javascript.

Ça donne quoi ?

Voilà à quoi ressemble le contenu d’un fichier ou d’une donnée JSON :

Il s’agit ici d’un exemple très simple, où articles est un tableau qui contient 2 éléments, qui ont respectivement un titre et un id, et version contient une simple valeur.

Voyons à présent comment exploiter ces données.

L’exploitation

En PHP, il existe une fonction qui permet de décoder un tel objet : json_decode().
Voilà un exemple d’utilisation :

Mais il y a 2 façons de l’utiliser.

Comme un tableau

Tout d’abord, la façon la plus simple est de récupérer toutes les informations sous forme d’un tableau. Pour cela, il suffit d’ajouter le paramètre true à la fonction :

Pour la suite, nous considérerons que la variable $jsondata contient les données JSON du premier code de cet article.

Voyons le résultat que cela produit :

Ici, nous récupérons un simple tableau avec tous les attributs du JSON, que nous pouvons donc exploiter comme un array classique.

Pour accéder au titre du second article, il nous suffira donc de faire :

Des objets partout

Ensuite, il existe une seconde manière d’utiliser une donnée JSON, avec les objets. Pour cela, ôtons simplement le paramètre true de la fonction json_decode() :

Dans ce cas de figure, on voit que tous les éléments sont des objets, et plus précisément de la classe stdClass (pour Standard Class, la classe passe partout de PHP), et les valeurs finales comme title ou version sont des attributs de ces objets.

On peut alors utiliser notre JSON comme un seul objet qui en contiendrait d’autres.
Pour récupérer une information, on peut donc faire :

Ou encore :

Exportez vos données

A présent, nous allons nous intéresser à l’encodage de vos données en JSON. Comme tout à l’heure, PHP fournit une fonction simple pour cela : json_encode() :

On retrouve finalement notre JSON d’origine. Notez que j’ai utilisé le paramètre JSON_PRETTY_PRINT dans la fonction json_encode() afin de récupérer un format JSON avec une indentation dans un soucis de lisibilité.

Encoder des objets

Ce format nous permet également d’encoder des objets. Voyons cela tout de suite :

Dans ce cas de figure, j’ai créé 2 instances de la classe Article puis leur ai affecté respectivement un title et un id. Pour l’encodage, il suffit de les mettre dans un array et le tour est joué 😉

Pour aller plus loin avec les objets

Il faut que je vous explique quelque chose tout de même concernant l’encodage des objets.

Lorsqu’on transforme un objet au format JSON, tous ses attributs déclarés publiques sont alors passés dans le format. En revanche, tous ses attributs privés et protégés ne le sont pas.

J’ai créé une classe Article comme suit :

Notez bien que tous les attributs ne sont pas publiques.
Aussi, si j’essaye d’exporter une instance de ma classe, voici le résultat :

Et oui, seul le titre déclaré publique sera envoyé au JSON. Pratique ou pas, voyons comment outrepasser cette restriction.

La méthode jsonSerialize()

Depuis PHP 5.4, il est possible d’implémenter une méthode dans la classe d’un objet afin de définir le comportement du dit objet lorsqu’il sera sérialisé. Cette méthode doit se nommer jsonSerialize().
De plus, la classe doit implémenter l’interface JsonSerializable.

Reprenons le code de notre classe Article et implémentons cette méthode :

Puis retestons notre code :

N’est-ce pas magique ? 😉

Un petit mot avant de partir ?

J’espère que vous avez pu voir que JSON est un format vraiment simple à mettre en place et à utiliser. De plus, sa syntaxe non verbeuse fait de lui un format léger et facilement lisible.
Alors, allez-vous franchir le pas et abandonner vos XML ? 😉