All pastes #937743 Raw Edit

Mine

public text v1 · immutable
·published 2008-03-11 04:40 UTC
rendered paste body
<?php

/**
 * json encoder
 * ---
 * Written by Jorge Medrano <me@h1pp1e.net>
 * Copyright (c) 2007 Jorge Medrano.
 *
 * Licensed under The MIT License
 * Redistributions of files must retain the above copyright notice.
 *
 * @author          Jorge Medrano <me@h1pp1e.net>
 * @copyright       Copyright (c) 2007, Jorge Medrano
 * @link            http://source.h1pp1e.net Source Projects
 * @version         0.0.1.26082007
 * @license         http://www.opensource.org/licenses/mit-license.php The MIT License
 */

class json {

	/**
	* Converts a PHP variable into a valid JSON string.
	* @access public
	* @param string $var PHP variable
	* @return string JSON string.
	*/
	public static function encode($var){
		$parsed = "";
		switch (gettype($var)){
			case "boolean": 
				$parsed = ($var ? "true" : "false");
			break;
			case "double":
			case "float": 
			case "integer": 
				$parsed = $var;
			break;
			case "string": 
				$replacement = json::get_replacement();
				$parsed = '"';
				$var = str_replace($replacement["find"], $replacement["replace"], $var);
				$parsed .= $var;
				$parsed .= '"';
			break;
			case "NULL": 
				$parsed = "null";
			break;
			case "array": 
				if (!count($var) || array_keys($var) === range(0, count($var)-1)){
					$array = array();
					foreach ($var as $valor) {
						array_push($array, json::encode($valor));
					}
					return "[" . implode(",", $array) . "]";
				} else {
					$array = array();
					foreach ($var as $key => $value) {
						array_push($array, json::encode(strval($key)) . ":" . json::encode($value)); 
					}
					return "{" . implode(",", $array) . "}";
				}
			break;
			case "object":
				null;
			break;
			default:
				$parsed = '';
			break;

		}
		return $parsed;
	}

	/**
	* Replace the special characters for escape character
	* @access private
	* @return array 
	*/
	private static function get_replacement(){
		static $replacement = array("find" => array(), "replace" => array());
		if ($replacement["find"] == array()) {
			foreach(array_merge(range(0, 7), array(11), range(14, 31)) as $v) {
				$replacement["find"][] = chr($v);
				$replacement["replace"][] = "\\u00".sprintf("%02x", $v);
			}
			$replacement["find"] = array_merge(array(chr(0x5c), chr(0x2F), chr(0x22), chr(0x0d), chr(0x0c), chr(0x0a), chr(0x09), chr(0x08)), $replacement["find"]);
			$replacement["replace"] = array_merge(array('\\\\', '\\/', '\\"', '\r', '\f', '\n', '\t', '\b'), $replacement["replace"]);
		}	
		return $replacement;
	}
}
?>