Logo de islavisual
Isotipo de islavisual IslaVisual
imagen de sección

Ultima revisión 22/12/2012

Convertir de Array a JSON en PHP (array2JSON)

array2json es una función, realizada para PHP 5.2+ y que os permitirá convertir un array asociativo en un JSON de forma muy sencilla. Como veréis, sólo hay que enviarle un array bien formado. Finalmente si queremos presentarlo por pantalla, sólo habrá que enviar las cabeceras (header) correspondientes y hacer un echo.

Por hacer una pequeña introducción, JSON, acrónimo de JavaScript Object Notation, es un formato ligero para el intercambio de datos. JSON es un subconjunto de la notación literal de objetos de JavaScript que no requiere el uso de XML.

La simplicidad de JSON ha dado lugar a la generalización de su uso, especialmente como alternativa a XML en AJAX. Una de las supuestas ventajas de JSON sobre XML como formato de intercambio de datos en este contexto es que es mucho más sencillo escribir un analizador sintáctico (parser) de JSON. En JavaScript, un texto JSON se puede analizar fácilmente usando el procedimiento eval(), lo cual ha sido fundamental para que JSON haya sido aceptado por parte de la comunidad de desarrolladores AJAX, debido a la ubicuidad de JavaScript en casi cualquier navegador web.

/*     **************************************************************************************************************************************************************************************************
    FUNCIÓN PARA CONVERTIR UN ARRAY ASOCIATIVO EN UNA CADENA EN FORMATO JSON.
    PARÁMETROS:
    -----------
    $data             --> ES EL ARRAY DE ORIGEN
    ***************************************************************************************************************************************************************************************************/
/**
 * Function for convert an array associative to JSON string.
 * @param string $data The source array.
 * @return string Returns a JSON string.
 */
function array2json($data){
    $data = json_encode($data);
    
    $tabCount = 0;
    $result = '';
    $quotes = false;
    $separator = "\t";
    $newLine = "\n";

    for($i=0;$i<strlen($data);$i++){
        $c = $data[$i];
        if($c=='"' && $data[$i-1]!='\\') $quotes = !$quotes;
        if($quotes){
            $result .= $c;
            continue;
        }
        switch($c){
            case '{':
            case '[':
                $result .= $c . $newLine . str_repeat($separator, ++$tabCount);
                break;
            case '}':
            case ']':
                $result .= $newLine . str_repeat($separator, --$tabCount) . $c;
                break;
            case ',':
                $result .= $c;
                if($data[$i+1]!='{' && $data[$i+1]!='[') $result .= $newLine . str_repeat($separator, $tabCount);
                break;
            case ':':
                $result .= $c . ' ';
                break;
            default:
                $result .= $c;
        }
    }
    return  $result;
}

$arr = array("user" => "root", "user_id" => "1", "password" => "contraseña", "mensaje" => array("id" => "1", "descripcion" => "Descripción del texto", "prioridad" => "Alta"));
$json = array2json($arr);
header('Content-Type: application/json; charset=utf-8');
echo $json;

Espero que os sea útil alguna vez.

Sobre el autor

Imagen de Pablo Enrique Fernández Casado
Pablo Enrique Fernández Casado

CEO de IslaVisual, Manager, Full Stack Analyst Developer y formador por cuenta ajena con más de 25 años de experiencia en el campo de la programación y más de 10 en el campo del diseño, UX, usabilidad web y accesibilidad web. También es escritor y compositor de música, además de presentar múltiples soft kills como la escucha activa, el trabajo en equipo, la creatividad, la resiliencia o la capacidad de aprendizaje, entre otras.

Especializado en proveer soluciones integrales de bajo coste y actividades de consultoría de Usabilidad, Accesibilidad y Experiencia de Usuario (UX), además de ofrecer asesoramiento en SEO, optimización de sistemas y páginas web, entre otras habilidades.