Présentation

CopixJSON est une classe utilitaire permettent d'encoder et décoder des données au format JSON.

Lorsque le module PHP JSON est activé (ce qui est le cas par défaut à partir de PHP 5.2), CopixJSON utilise l'implémentation fournie. Sinon il utilise l'implémentation spécifique de Copix et définit les fonctions json_encode et json_decode.

Encodage en JSON

L'encodage se fait via la méthode statique CopixJSON::encode(), qui est similaire à json_encode() :

string CopixJSON::encode (mixed $pValue)

$pValue est la valeur à encoder. La valeur de retour est la chaîne JSON.

Exemple:

<?php
$obj = new stdClass();
$obj->val = 5;
$array = array("string", true, false, null, 4, 4.5, $obj, array("x"=>6, 7=>8));
echo CopixJSON::encode($array);
?>

Résultat:

["string",true,false,null,4,4.5,{"val":5},{"x":6,"7":8}]

Décodage de JSON

Le décodage se fait via la méthode statique CopixJSON::decode(), qui est similaire à json_decode() :

mixed CopixJSON::decode (string $pJSON, boolean $pAssoc = false)

$pJSON est la chaîne à decoder. $pAssoc indique si l'on veut générer des objets stdClass (faux) ou des tableaux associatifs (vrai) pour les objets JSON. La valeur de retour est la valeur décodée ou false si une erreur s'est produite.

Exemple :

<?php
echo "assoc=false:<br/>";
var_dump(CopixJSON::decode('{"a":5,"b":6}'));
echo "assoc=true:<br/>";
var_dump(CopixJSON::decode('{"a":5,"b":6}', true));
?>

Résultat:

assoc=false:

object(stdClass)[2]
  public 'a' => int 5
  public 'b' => int 6

assoc=true:

array
  'a' => int 5
  'b' => int 6

Implémentation spécifique de Copix

L'implémentation spécifique de Copix est écrite totalement en PHP. Elle est donc forcément plus lente que le module JSON. Cependant, elle est plus souple car elle permet de définir des objets fournissant leur propre représentation JSON.

CopixJSONDecoder

La classe CopixJSONDecoder fournit une méthode statique CopixJSONDecoder::decode() qui permet de décoder du JSON. Son fonctionnement est similaire à CopixJSON::decode().

CopixJSONEncoder

La classe CopixJSONEncoder fournit une méthode statique CopixJSONEncoder::encode() qui permet d'encoder en JSON. Son fonctionnement est similaire à CopixJSON::encode() à un détail près : elle reconnaît et prend en charge les objets implémentant l'interface ICopixJSONEncodable.

ICopixJSONEncodable

Cette interface décrit un objet capable de fournir lui-même sa propre représentation JSON. Elle définit une seule méthode :

string toJSON();

Cette méthode doit retourner la représentation JSON de l'objet.

Exemple :

<?php

class MaClasse implements ICopixJSONEncodable {

  private $_valeur = null;

  public function __construct($pValeur) {
    $this->_valeur = $pValeur;
  }

  public function toJSON() {
    return sprintf('%5.2f', $this->_valeur * 2);
  }

}

$instance = new MaClasse (50.2);

echo CopixJSONEncoder::encode(array(5,$instance,6));

?>

Résultat:

[5,100.40,6]