PHP json_encode Alternative
by Mike on Jan.25, 2010, under Web Development
The amount of times I’ve been working on a project and the environment hasn’t had the useful json_encode function installed due to PHP being < version 5.2 is quite worrying. So, I decided to write my own replacement. How very decent of me. You can use it as you will. I wrote this a long time ago, but I've noticed it's somehow wormed its way onto the php.net site under someone elses name, and someone else seems to be taking credit for it. Oh well...
<?php
if (!function_exists(’json_encode’))
{
function json_encode($a=false)
{
// Some basic debugging to ensure we have something returned
if (is_null($a)) return ‘null’;
if ($a === false) return ‘false’;
if ($a === true) return ‘true’;
if (is_scalar($a))
{
if (is_float($a))
{
// Always use “.” for floats.
return floatval(str_replace(”,”, “.”, strval($a)));
}
if (is_string($a))
{
static $jsonReplaces = array(array(”\\”, “/”, “\n”, “\t”, “\r”, “\b”, “\f”, ‘”‘), array(’\\\\’, ‘\\/’, ‘\\n’, ‘\\t’, ‘\\r’, ‘\\b’, ‘\\f’, ‘\”‘));
return ‘”‘ . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . ‘”‘;
}
else
return $a;
}
$isList = true;
for ($i = 0, reset($a); $i {
if (key($a) !== $i)
{
$isList = false;
break;
}
}
$result = array();
if ($isList)
{
foreach ($a as $v) $result[] = json_encode($v);
return ‘[' . join(',', $result) . ']‘;
}
else
{
foreach ($a as $k => $v) $result[] = json_encode($k).’:’.json_encode($v);
return ‘{’ . join(’,', $result) . ‘}’;
}
}
}
?>
February 20th, 2010 on 2:27 pm
You missed the boilerplate after “for ($i = 0, reset($a); $i” it seems.
Nice function!
March 12th, 2010 on 10:54 am
It’s good, it’s useful (as usual), actionable and concise. Love it.