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]);
?>