function __decode(&$encode, &$pos, &$slen, &$stdClass) { switch ($encode[$pos]) { case 't': $result = true; $pos += 4; break; case 'f': $result = false; $pos += 5; break; case 'n': $result = null; $pos += 4; break; case '[': $result = array(); ++$pos; while ($encode[$pos] !== ']') { array_push($result, FastJSON::__decode($encode, $pos, $slen, $stdClass)); if ($encode[$pos] === ',') { ++$pos; } } ++$pos; break; case '{': $result = $stdClass ? new stdClass() : array(); ++$pos; while ($encode[$pos] !== '}') { $tmp = FastJSON::__decodeString($encode, $pos); ++$pos; if ($stdClass) { $result->{$tmp} = FastJSON::__decode($encode, $pos, $slen, $stdClass); } else { $result[$tmp] = FastJSON::__decode($encode, $pos, $slen, $stdClass); } if ($encode[$pos] === ',') { ++$pos; } } ++$pos; break; case '"': switch ($encode[++$pos]) { case '"': $result = ""; break; default: $result = FastJSON::__decodeString($encode, $pos); break; } ++$pos; break; default: $tmp = ''; preg_replace('/^(\\-)?([0-9]+)(\\.[0-9]+)?([eE]\\+[0-9]+)?/e', '$tmp = "\\1\\2\\3\\4"', substr($encode, $pos)); if ($tmp !== '') { $pos += strlen($tmp); $nint = intval($tmp); $nfloat = floatval($tmp); $result = $nfloat == $nint ? $nint : $nfloat; } break; } return $result; }