Función para JSON en PHP 5.1 o inferior

Según la documentación oficial, las funciones de PHP para JSON solo están disponibles desde la versión 5.2.0 en adelante. Esto ha provocado más de algún dolor de cabeza a muchos programadores que han tenido que ingeniárselas con medios alternativos para transferir la información a javascript. Afortunadamente este ingenio a veces llega muy lejos y produce algunas cosas bastante eficientes, como la que les presento hoy. Es una función que ha llegado a mis manos vía Luis López y que básicamente es replica el trabajo que hace json_encode(). La dejó acá, libre para todo aquel que necesite utilizarla.

// Sólo si la funcion no existe, entonces la crea
if (!function_exists('json_encode')){

    function json_encode($a=false){
        if (is_null($a)) return 'null';
        if ($a === false) return 'false';
        if ($a === true) return 'true';
        if (is_scalar($a)){
            if (is_float($a)){
                // Siempre usa "." para 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 < count($a); $i++, next($a)){
            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) . '}';
        }

    }

}

De momento no está comentada completamente, y espero hacerlo en un futuro, pero si algún lector quiere colaborar, no dude en hacerlo y lo publicaremos con los créditos respectivos.

No TweetBacks yet. (Be the first to Tweet this post)

Entradas relacionadas

, ,

  1. #1 by Alberto de Castilla on 22/Mar/2010

    Muchas gracias, nos salvaron de muchos problemas

  2. #2 by Attakinsky on 22/Mar/2010

    Que bueno saberlo, y agradezco tu comentario.

  3. #3 by Gucas on 24/Mar/2010

    Muchas Muchas Muuuuuuuuchas gracias, ahi clientes q piden PHP por debajo de 5.2 y todo se iba por json. graaaacias

  4. #4 by bacc on 17/Ago/2010

    no me funciona :(

  5. #5 by bacc on 17/Ago/2010

    • #6 by Attakinsky on 17/Ago/2010

      Gracias por el enlace. Según aclaré en la introducción de este post, la función la recibí por medio de un compañero pero nunca le pregunté de donde la obtuvo.

      Respecto a que no funciona, habría que ver como es tu instalación de PHP porque to hice pruebas en PHP 5.1 y si me funcionó a la perfección.

(no será publicado)

  1. No hay trackbacks.