Skip to content

Instantly share code, notes, and snippets.

@jimpowelltech
Created July 31, 2014 16:04
Show Gist options
  • Save jimpowelltech/04b74582e0f01d68edb6 to your computer and use it in GitHub Desktop.
Save jimpowelltech/04b74582e0f01d68edb6 to your computer and use it in GitHub Desktop.
The json_encode replacement for using typed data
<?php
function jimson_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); true; $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) . '}';
}
}
function jimson_decode($json) {
$comment = false;
$out = '$x=';
for ($i=0; $i<strlen($json); $i++) {
if (!$comment) {
if (($json[$i] == '{') || ($json[$i] == '[')) {
$out .= ' array(';
}
else if (($json[$i] == '}') || ($json[$i] == ']')) {
$out .= ')';
}
else if ($json[$i] == ':') {
$out .= '=>';
}
else {
$out .= $json[$i];
}
}
else {
$out .= $json[$i];
}
if ($json[$i] == '"' && $json[($i-1)]!="\\") {
$comment = !$comment;
}
}
eval($out . ';');
return $x;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment