Темы

Блоги

JSON в php Суббота 05 Декабрь 2009 14:36:11

Иногда на сервере бывает не установлено расширение php - json, а функции json_encode и json_decode очень нужны. В этом случае их можно добавить самостоятельно. Ниже приведен код. Код не мой и авторя я уже не помню, но все равно ему отдельная благодарность.

Вот реализация функции json_encode:

if (!function_exists('json_encode')) {  
function json_encode($value)
{
if (is_int($value)) {
return (string)$value;
} elseif (is_string($value)) {
$value = str_replace(array('\\', '/', '"', "\r", "\n", "\b", "\f", "\t"),
array('\\\\', '\/', '\"', '\r', '\n', '\b', '\f', '\t'), $value);
$convmap = array(0x80, 0xFFFF, 0, 0xFFFF);
$result = "";
for ($i = mb_strlen($value) - 1; $i >= 0; $i--) {
$mb_char = mb_substr($value, $i, 1);
if (mb_ereg("&#(\\d+);", mb_encode_numericentity($mb_char, $convmap, "UTF-8"), $match)) {
$result = sprintf("\\u%04x", $match[1]) . $result;
} else {
$result = $mb_char . $result;
}
}
return '"' . $result . '"';
} elseif (is_float($value)) {
return str_replace(",", ".", $value);
} elseif (is_null($value)) {
return 'null';
} elseif (is_bool($value)) {
return $value ? 'true' : 'false';
} elseif (is_array($value)) {
$with_keys = false;
$n = count($value);
for ($i = 0, reset($value); $i < $n; $i++, next($value)) {
if (key($value) !== $i) {
$with_keys = true;
break;
}
}
} elseif (is_object($value)) {
$with_keys = true;
} else {
return '';
}
$result = array();
if ($with_keys) {
foreach ($value as $key => $v) {
$result[] = json_encode($key) . ':' . json_encode($v);
}
return '{' . implode(',', $result) . '}';
} else {
foreach ($value as $key => $v) {
$result[] = json_encode($v);
}
return '[' . implode(',', $result) . ']';
}
}
}

А вот json_decode;):

/**
* json_decode for < PHP 5
*/
if (!function_exists('json_decode')) {
function json_decode($v) {
if ($v{0} == '"') {
$v = drupal_substr($v, 1, -1);
}
elseif ($v{0} == '{') {
$var = explode(",", drupal_substr($v, 1, -1)); # changed from drupal_substr($v, 1, -2), since it was chopping off the final quote
$v = array();
foreach ($var as $value) {
$va = explode(":", $value);
# added the following condition to remove quotes from the key
if($va[0]{0} == '"') {
$va[0] = drupal_substr($va[0], 1, -1);
}
$v[$va[0]] = json_decode($va[1]);
}
}
elseif ($v{0} == '[') {
$var = explode(",", drupal_substr($v, 1, -2));
$v = array();
foreach ($var as $value) {
$v[] = json_decode($va[0]);
}
}
return $v;
}
}
  
Пользуйтесь наздоровье!

 

 

Теги:

Комментарии

  • Хм... Нет комментариев... Но вы пожете исправить это!

Написать комментарий

Прежде чем высказать свое мнение, прочитайте пожалуйста правила!
Вам необходимо включить показ изображений в браузере для того чтобы увидеть код

Дайте нам знать, что вы - живой человек. Для нас это важно!
Кликните, если плохо видно