Convertir csv en json en php

Rate this post

Parece evidente que el formato json le ha ganado la partida xml como formato estándar para el intercambio de datos y por ese motivo os paso a explicar como convertir un csv en formato json en php.

Lo primero que haremos es utilizar la función fopen para abrir el csv en modo lectura.

// abrimos csv
    if (!($fp = fopen('test.csv', 'r'))) {
        die("Can't open file...");
    }

A continuación usaremos la función fgetcsv para pasar las cabeceras al csv: puntero al csv ($fp), longitud máxima de la linea (1024) y delimitador («,»).

   //cabcereas csv
    $key = fgetcsv($fp,"1024",",");

Lo siguiente es recorrer el csv con un bucle y guardarlo en un array.

   // guardamos las filas de csv en un array
    $json = array();
        while ($row = fgetcsv($fp,"1024",",")) {
        $json[] = array_combine($key, $row);
    }

Y solo nos quedaría codificar el array en formato json.

// codificamos array en formato json
json_encode($json);

A continuación os adjunto un ejemplo que pasa el fichero csv por parámetro y lo guarda en un fichero json.

<?php
// funcion para convertir csv en json
function csvToJson($fname) {

    // abrimos csv
    if (!($fp = fopen($fname, 'r'))) {
        die("Can't open file...");
    }
    
    //asignamos cabeceras csv
    $key = fgetcsv($fp,"1024",",");
    
    // recorremos csv y guardamos en un array
    $json = array();
        while ($row = fgetcsv($fp,"1024",",")) {
        $json[] = array_combine($key, $row);
    }
    
    // cerramos flujo abierto
    fclose($fp);
    
    // codificamos array en formato json
	print_r(json_encode($json));
	
	// guardamos json en un fichero
	 $file = fopen($fname . '.json','w');
          fwrite($file, json_encode($json));
          fclose($file);
}

//llamamos a la función guardada pasando csv por parametro
//ejemplo de uso: ./php csv-to-json.php test.csv
csvToJson($argv[1]);

?>

Deja un comentario