JsonWrapper

Часть кода была взята с сайта PHP.net комментарий 78719

  1. class JsonWrapper {
  2.         private $object;
  3.         private $array;
  4.        
  5.         private static $instance;
  6.        
  7.         private function __construct() {
  8.             $this->object = array();
  9.         }
  10.        
  11.         public function createObject() {
  12.             return new StdClass;
  13.         }
  14.        
  15.         public function createArray() {
  16.             return array();
  17.         }
  18.        
  19.         public function addObjectToArray(&$array, $object) {
  20.             array_push($array, $object);
  21.         }
  22.        
  23.         public function addProperty(&$object, $key, $value) {
  24.             if (!isset($object))
  25.                 $object = new StdClass;
  26.             $object->{$key} = str_replace("\n", "", $value);
  27.         }
  28.        
  29.         public function __toJSON($object) {
  30.             return $this->json_encode($object);
  31.         }
  32.         /**
  33.          * Character replacements for JSON.
  34.          * @return JSON with correct characters
  35.          * @param $a Object[optional]
  36.          */
  37.        
  38.         public function json_encode($a=false) {
  39.           if (is_null($a)) return ‘null’;
  40.           if ($a === false) return ‘false’;
  41.           if ($a === true) return ‘true’;
  42.           if (is_scalar($a))
  43.           {
  44.             if (is_float($a))
  45.             {
  46.               $a = str_replace(",", ".", strval($a));
  47.             }
  48.        
  49.                
  50.                 static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", ‘"’, "’"),
  51.                 array(\\\\, \\/’, \\n’, \\t’, \\r’, \\b’, \\f’, ‘\"’ ,\\\’));
  52.                 return ‘"’ . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . ‘"’;
  53.               }
  54.               $isList = true;
  55.               for ($i = 0, reset($a); $i < count($a); $i++, next($a))
  56.               {
  57.                 if (key($a) !== $i)
  58.                 {
  59.                   $isList = false;
  60.                   break;
  61.                 }
  62.               }
  63.               $result = array();
  64.               if ($isList)
  65.               {
  66.                 foreach ($a as $v) $result[] = $this->json_encode($v);
  67.                 return ‘[ ' . join(', ', $result) . ' ]‘;
  68.               }
  69.               else
  70.               {
  71.                 foreach ($a as $k => $v) $result[] = $this->json_encode($k).‘: ‘.$this->json_encode($v);
  72.                 return ‘{ ‘ . join(‘, ‘, $result) . ‘ }’;
  73.               }
  74.           }
  75.        
  76.         public static function getInstance() {
  77.             if (!self::$instance) {
  78.                 self::$instance = new self;
  79.             }
  80.             return self::$instance;
  81.         }
  82. }

Название для класса может не совсем удачной, и реализация, но используется мной да и другими мемберами успешно для отдачи json респонса.

Применение:

  1. $json = JsonWrapper::getInstance();
  2. $object = $json->createObject();
  3. $array = $json->createArray();
  4. $json->addProperty($object, ‘first’, ‘1th’);
  5. $json->addProperty($object, ’second’, ‘2nd’);
  6. $json->addObjectToArray($array, $object);
  7. print $json->__toJSON($array);

Вывод

[ { "first": "1th", "second": "2nd" } ]