Convertir JSON a CSV con PHP
Convertir JSON a CSV con PHP. Este tutorial brinda 3 ejemplos completos para convertir un contenido JSON en un archivo CSV separado con comas. Detallaremos ampliamente y dejaremos para que puedan descargar los ejemplos al final del artículo.
Convertir JSON a CSV con PHP
Este ejemplo rápido lo logra en unos pocos pasos. Utiliza el método PHP fputcsv()
para preparar la salida CSV.
- Lee el JSON de entrada y lo decodifica en una matriz.
- Itere la matriz JSON para leer la línea del registro.
- Aplique PHP
fputcsv()
para escribir las claves de la matriz en el encabezado, seguidas de los valores de la matriz.
Ejemplo rápido con función PHP
Para este ejemplo usaremos una función dinámica para convertir rápidamente a un fichero CSV
desde JSON
y el archivo se llamara: ejemplo-rapido.php
<?php
function convertJsonToCSV($jsonFile, $csvFile)
{
if (($json = file_get_contents($jsonFile)) == false) {
die('No se puede leer el archivo JSON.');
}
$jsonString = json_decode($json, true);
$fp = fopen($csvFile, 'w');
fputcsv($fp, array_keys($jsonString[0]));
for ($i = 0; $i < count($jsonString); $i ++) {
fputcsv($fp, array_values($jsonString[$i]));
}
fclose($fp);
return;
}
$jsonFile = 'animales.json';
$csvFile = 'animales.csv';
// LLamamos a la función para convertir a CSV
convertJsonToCSV($jsonFile, $csvFile);
echo 'JSON a CSV convertido. <a href="' . $csvFile . '" target="_blank">Descargar archivo CSV</a>';
- El archivo JSON de entrada está almacenada en la unidad local y se especifica en una variable PHP
$jsonFile
. - Este ejemplo crea una función personalizada
convertJsonToCSV()
. Requiere el JSON de entrada y los nombres de archivo CSV de destino. - Convierte el objeto JSON de entrada en una matriz PHP. Luego, itera la matriz de PHP para leer la fila.
- Esta función utiliza la función PHP
fputcsv()
para escribir cada fila en el archivo CSV de destino.
Producción y salida en el navegador:
El programa anterior devolverá el siguiente contenido CSV en un archivo. En un tutorial anterior, vimos cómo exportar a un archivo CSV usando la función PHP
fputcsv()
.
Cadena JSON a CSV en PHP
Este ejemplo tiene un enfoque diferente para tratar la conversión de PHP JSON a CSV.
- Utiliza una cadena JSON como entrada en lugar de leer un archivo. La entrada de cadena JSON se inicia en una variable de PHP y se pasa a la función
convertJSONtoCSV()
. - Lee la cadena JSON y la convierte en una matriz JSON para preparar CSV. El artículo vinculado tiene un ejemplo de lectura de CSV usando PHP.
- Luego, itera la matriz JSON y aplica PHP fputcsv() para escribir la fila CSV.
- Lee array_keys para proporcionar el encabezado CSV. Y esto se ejecutará solo por primera vez. Escribe los nombres de las columnas como la primera fila del CSV de salida.
Este archivo tendrá como nombre: json-cadena-a-csv.php
<?php
function convertJsonToCSV($jsonString, $csvFile)
{
$jsonArray = json_decode($jsonString, true);
$fp = fopen($csvFile, 'w');
$header = false;
foreach ($jsonArray as $line) {
if (empty($header)) {
$header = array_keys($line);
fputcsv($fp, $header);
$header = array_flip($header);
}
fputcsv($fp, array_merge($header, $line));
}
fclose($fp);
return;
}
$jsonString = '[
{
"Id":"1",
"Nombre":"Leon",
"Tipo":"Salvaje",
"Rol":"Jefe"
},
{
"Id":"2","Nombre":"Tigre",
"Tipo":"Salvaje",
"Rol":"CEO"
},
{
"Id":"3",
"Nombre":"Jaguar",
"Tipo":"Salvaje",
"Rol":"Desarrollador Senior"
}
]';
$csvFile = 'animales.csv';
convertJsonToCSV($jsonString, $csvFile);
echo 'JSON a CSV convertido. <a href="' . $csvFile . '" target="_blank">Descargar archivo CSV</a>';
Cargue el archivo CSV para convertirlo a JSON en PHP
Este ejemplo es para realizar el JSON a CSV con una opción de carga de archivos.
- Este código será útil si desea convertir el archivo JSON cargado en un CSV.
- Muestra un formulario HTML con un campo de entrada de archivo. Este campo solo aceptará archivos ‘
.json
‘. La restricción se gestiona con el atributo HTML «aceptar«. También se puede validar con un script de validación de archivos del lado del servidor en PHP. $_FILES['csv-file']['tmp_name']
contiene el contenido del archivo CSV publicado. El script de conversión de JSON a CSV utiliza el contenido del archivo cargado.- Luego, analiza el JSON y lo convierte en CSV. Una vez convertido, se mostrará el enlace al navegador para descargar el archivo.
Nombre de archivo: cargar-json-a-convertir-a-csv.php
<?php
if (! empty($_FILES["csv-file"]["tmp_name"])) {
$csvFile = 'animal.csv';
if (($json = file_get_contents($_FILES["csv-file"]["tmp_name"])) == false) {
die('No se puede leer el archivo JSON.');
}
$jsonString = json_decode($json, true);
$fp = fopen($csvFile, 'w');
fputcsv($fp, array_keys($jsonString[0]));
for ($i = 0; $i < count($jsonString); $i ++) {
fputcsv($fp, array_values($jsonString[$i]));
}
fclose($fp);
$respuesta = 'JSON a CSV convertido. <a href="' . $csvFile . '" target="_blank">Descargar archivo CSV</a>';
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Convertir JSON a CSV</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container"> <a class="navbar-brand" href="#">BaulPHP</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExample07" aria-controls="navbarsExample07" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button>
<div class="collapse navbar-collapse" id="navbarsExample07">
<ul class="navbar-nav mr-auto">
<li class="nav-item active"> <a class="nav-link" href="#">Portada <span class="sr-only">(current)</span></a> </li>
</ul>
</div>
</div>
</nav>
<hr>
<div class="container">
<div class="card">
<div class="card-header bg-primary text-white"> Cargar y convertir JSON a CSV </div>
<div class="card-body">
<form name="frmUpload" method="post" enctype="multipart/form-data">
<div class="form-group">
<div class="col-md-6">
<div class="input-group">
<div class="custom-file">
<input type="file" class="custom-file-input" id="inputGroupFile04" aria-describedby="inputGroupFileAddon04" name="csv-file" accept=".json">
<label class="custom-file-label" for="inputGroupFile04">Cargar archivo JSON</label>
</div>
<div class="input-group-append"> </div>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-6">
<button class="btn btn-primary" name="convertir">Convertir a CSV</button>
</div>
</div>
<div class="form-group">
<div class="col-md-6">
<?php
if (!empty($respuesta))
{
?>
<div class="alert alert-success" role="alert"> <?php echo $respuesta; ?> </div>
<?php
}
?>
</div>
</div>
</form>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bs-custom-file-input/dist/bs-custom-file-input.min.js"></script>
<script>
bsCustomFileInput.init()
var btn = document.getElementById('btnResetForm')
var form = document.querySelector('form')
btn.addEventListener('click', function() {
form.reset()
})
</script>
</body>
</html>
Conclusiones y recomendaciones
En este articulo hemos aprendido a convertir cadena y fichero JSON a formato CSV usando funciones PHP. Sin embargo, recuerden que se puede programar de varias formas la conversión de formatos.
Cabe resaltar que la estructura JSON debe estar correctamente estructurado como lo hemos explicado en este articulo: Convertir CSV a JSON
Esperando que esta explicación les ayude en sus proyectos web