Banner

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.