Programmation PHP/JSON
Bibliothèque PHP-JSON
modifierLe format de données JavaScript Object Notation (JSON) peut être utilisé en PHP grâce à différentes fonctions natives depuis PHP 5.2.0.
Installation (pour PHP < 5.2)
modifierLinux
modifierapt-get install php5-json
Windows
modifier- Télécharger le fichier json-1.2.1.tgz sur https://pecl.php.net/package/json.
- Décompresser et compiler le code source en json.so.
- Le copier dans le dossier des extensions PHP.
- Dans le php.ini (ex : C:\Program Files (x86)\EasyPHP\binaries\php\php_runningversion\php.ini), ajouter :
extension=json.so
json_encode()
modifierCette fonction convertit un objet PHP en JSON exploitable en JavaScript[1]. Ex :
$tableau = array('colonne 1' => 'valeur 1', 'colonne 2' => 'valeur 2', 'colonne 3' => 'valeur 3');
echo json_encode($tableau);
{"colonne 1":"valeur 1","colonne 2":"valeur 2","colonne 3":"valeur 3"}
json_encode() sur une instance de classe n'en n'affiche que les attributs publics. Pour encoder les privés, il faut que la classe implémente JsonSerializable
en qui impose une méthode jsonSerialize()[2]. Ex :
public function jsonSerialize() {
return $this->array;
}
Options
modifier
Par défaut json_encode() échappe les caractères spéciaux non ASCII (ex : "é" devient "\u00e9"). Pour éviter cela on utilise l'option suivante :
$a = json_encode($monTableau, JSON_UNESCAPED_UNICODE);
Par ailleurs, les erreurs de json_encode() sont accessibles avec json_last_error()
ou json_last_error_msg()
. Ex :
$a = json_encode($monTableau);
if (json_last_error() === JSON_ERROR_INF_OR_NAN) {
$this->logger->error(json_last_error_msg());
$a = json_encode($monTableau, JSON_PARTIAL_OUTPUT_ON_ERROR);
}
Pour afficher dans un format plus lisible par un humain (indenté), utiliser JSON_PRETTY_PRINT
.
json_decode()
modifierConvertit une chaine de caractères JSON en :
- Si aucun paramètre 2 n'est passé, un objet PHP dont chaque attribut correspond à une clé du tableau.
- Si le paramètre 2 vaut "true", un tableau associatif[3].
La gestion des erreurs est semblable à celle de json_encode()
.
PEAR Services_JSON
modifierLe framework PEAR possède aussi un package Services_JSON contenant des .php avec des exemples, à télécharger en tant que JSON.tar.gz sur http://pear.php.net/pepr/pepr-proposal-show.php?id=198.
Il requiert PHPUnit.phpTélécharger.
La classe Services_JSON de JSON.php peut s'utiliser comme décrit dans Test-JSON.php.