Convertir registros JSON a formato CSV es un requisito frecuente para la generación de informes e intercambio de datos en aplicaciones modernas de PHP. Aspose.BarCode Cloud SDK for PHP ofrece una API potente para generar imágenes de códigos de barras y manejar transformaciones de archivos directamente desde su servidor. En este tutorial verá un ejemplo completo de código JSON a CSV en PHP que también incrusta imágenes de códigos de barras para cada registro. Repasaremos la configuración, la implementación paso a paso, una alternativa cURL y las mejores prácticas de rendimiento.
Cómo transformar datos JSON a CSV en PHP - Paso a paso
- Instalar el SDK mediante Composer: Use el paquete oficial de Composer para agregar la biblioteca a su proyecto.
composer require aspose-barcode-cloud
- Configurar credenciales de API y crear la instancia BarCodeApi: Reemplace
YOUR_APP_SIDyYOUR_APP_KEYcon sus credenciales en la nube.
use Aspose\BarCode\Cloud\Configuration;
use Aspose\BarCode\Cloud\BarCodeApi;
$appSid = 'YOUR_APP_SID';
$appKey = 'YOUR_APP_KEY';
$config = new Configuration($appSid, $appKey);
$apiInstance = new BarCodeApi($config);
Referencia: BarCodeApi class. 3. Abrir el archivo JSON de origen y el archivo CSV de destino: El script trabaja con flujos de archivo para mantener bajo el uso de memoria.
$inputHandle = fopen($inputJsonPath, 'rb');
$outputHandle = fopen($outputCsvPath, 'wb');
- Recorrer los registros JSON, generar códigos de barras y escribir filas CSV: Cada campo
iddel registro se convierte en una imagen de código de barras, codificada en base64, y se agrega al CSV.
while (($line = fgets($inputHandle)) !== false) {
$record = json_decode(trim($line), true);
$barcodeValue = $record['id'] ?? '';
$barcodeRequest = new GenerateBarcodeRequest([
'type' => $barcodeFormat,
'text' => (string)$barcodeValue,
'format' => 'PNG',
'resolutionX' => 300,
'resolutionY' => 300
]);
$barcodeResponse = $apiInstance->generateBarcode($barcodeRequest);
$record['barcode_image'] = base64_encode($barcodeResponse);
// Write header once, then rows
// ...
}
- Limpiar archivos temporales y cerrar flujos: La carpeta temporal se elimina después del procesamiento.
fclose($inputHandle);
fclose($outputHandle);
array_map('unlink', glob($barcodeTempDir . '/*.png'));
rmdir($barcodeTempDir);
Generar salida CSV a partir de JSON en PHP - Ejemplo de código completo
El siguiente ejemplo muestra la implementación completa de la lectura de un archivo JSON, la creación de imágenes de códigos de barras y la escritura de los datos en un archivo CSV utilizando Aspose.BarCode Cloud SDK for PHP.
<?php
declare(strict_types=1);
// Autoload Composer dependencies (Aspose.BarCode Cloud SDK)
require __DIR__ . '/vendor/autoload.php';
use Aspose\BarCode\Cloud\Configuration;
use Aspose\BarCode\Cloud\BarCodeApi;
use Aspose\BarCode\Cloud\Model\GenerateBarcodeRequest;
// -------------------- Configuration --------------------
$appSid = 'YOUR_APP_SID';
$appKey = 'YOUR_APP_KEY';
$config = new Configuration($appSid, $appKey);
$apiInstance = new BarCodeApi($config);
// -------------------- Settings --------------------
$inputJsonPath = __DIR__ . '/data/input.json'; // JSON source (one object per line)
$outputCsvPath = __DIR__ . '/data/output.csv'; // Resulting CSV
$delimiter = ';'; // Custom CSV delimiter
$encoding = 'UTF-8'; // Target CSV encoding
$barcodeFormat = 'Code128'; // Barcode symbology
$barcodeField = 'id'; // JSON field to turn into barcode
$barcodeTempDir = __DIR__ . '/temp_barcodes'; // Temporary folder for barcode images
// Ensure temporary directory exists
if (!is_dir($barcodeTempDir)) {
mkdir($barcodeTempDir, 0777, true);
}
// -------------------- Open Files --------------------
$inputHandle = fopen($inputJsonPath, 'rb');
if ($inputHandle === false) {
throw new RuntimeException("Unable to open input JSON file.");
}
$outputHandle = fopen($outputCsvPath, 'wb');
if ($outputHandle === false) {
fclose($inputHandle);
throw new RuntimeException("Unable to open output CSV file.");
}
// Write UTF-8 BOM for Excel compatibility
fwrite($outputHandle, "\xEF\xBB\xBF");
// -------------------- Process JSON --------------------
$headerWritten = false;
while (($line = fgets($inputHandle)) !== false) {
$line = trim($line);
if ($line === '' || $line === '[' || $line === ']') {
continue; // skip empty lines or array brackets
}
// Remove trailing commas if present (common in pretty‑printed arrays)
$line = rtrim($line, ',');
$record = json_decode($line, true);
if (json_last_error() !== JSON_ERROR_NONE) {
continue; // skip malformed lines
}
// Generate barcode image for the selected field
$barcodeValue = $record[$barcodeField] ?? '';
$barcodeRequest = new GenerateBarcodeRequest([
'type' => $barcodeFormat,
'text' => (string)$barcodeValue,
'format' => 'PNG',
'resolutionX' => 300,
'resolutionY' => 300
]);
try {
$barcodeResponse = $apiInstance->generateBarcode($barcodeRequest);
$barcodeFilePath = $barcodeTempDir . '/' . uniqid('barcode_', true) . '.png';
file_put_contents($barcodeFilePath, $barcodeResponse);
// Store relative path (or base64) in CSV; here we use base64 to keep CSV self‑contained
$barcodeBase64 = base64_encode($barcodeResponse);
$record['barcode_image'] = $barcodeBase64;
} catch (Exception $e) {
$record['barcode_image'] = '';
}
// Prepare CSV row with proper UTF‑8 encoding
$csvRow = [];
foreach ($record as $value) {
if (is_array($value) || is_object($value)) {
$value = json_encode($value, JSON_UNESCAPED_UNICODE);
}
$csvRow[] = mb_convert_encoding((string)$value, $encoding, 'UTF-8');
}
// Write header once
if (!$headerWritten) {
$header = array_keys($record);
fputcsv($outputHandle, $header, $delimiter);
$headerWritten = true;
}
// Write data row
fputcsv($outputHandle, $csvRow, $delimiter);
}
// -------------------- Cleanup --------------------
fclose($inputHandle);
fclose($outputHandle);
// Optionally delete temporary barcode files
array_map('unlink', glob($barcodeTempDir . '/*.png'));
rmdir($barcodeTempDir);
Nota: Este ejemplo de código demuestra la funcionalidad principal. Antes de usarlo en su proyecto, asegúrese de actualizar las rutas de los archivos (
input.json,output.csv, etc.) para que coincidan con sus ubicaciones reales, verifique que todas las dependencias requeridas estén correctamente instaladas y pruebe exhaustivamente en su entorno de desarrollo. Si encuentra algún problema, consulte la documentación oficial o póngase en contacto con el equipo de soporte para obtener ayuda.
Crear CSV mediante API REST a partir de JSON usando cURL
Puede obtener el mismo resultado sin escribir código PHP llamando directamente a los endpoints REST de Aspose.BarCode Cloud. El flujo de trabajo consiste en cargar el archivo JSON, generar un código de barras para cada registro y descargar el CSV final.
- Obtener un token de acceso (reemplaza los marcadores de posición con tus credenciales).
curl -X POST "https://api.aspose.cloud/connect/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET"
La respuesta contiene access_token.
- Cargar el archivo JSON de origen.
curl -X PUT "https://api.aspose.cloud/v3.0/barcode/storage/file/input.json" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
--data-binary @data/input.json
- Generar un código de barras para un solo registro (repetir para cada registro en un script).
curl -X POST "https://api.aspose.cloud/v3.0/barcode/generate" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type":"Code128",
"text":"12345",
"format":"PNG",
"resolutionX":300,
"resolutionY":300
}' \
-o temp/barcode_12345.png
-
Ensambla el archivo CSV (puede usar un script simple que lea el JSON cargado, inserte el código de barras codificado en base64 y escriba el CSV).
El paso de ensamblado se realiza localmente; la API no ofrece un endpoint directo de JSON‑a‑CSV. -
Descargar el CSV resultante.
curl -X GET "https://api.aspose.cloud/v3.0/barcode/storage/file/output.csv" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-o data/output.csv
Para obtener una lista completa de los parámetros, consulte la documentación oficial de la API.
Preparando el Entorno
Para comenzar a programar, necesitas un tiempo de ejecución PHP (7.4 o posterior) y una cuenta válida de Aspose.BarCode Cloud.
composer require aspose-barcode-cloud
Descargue el paquete SDK desde la página oficial de lanzamientos: Aspose.BarCode Cloud SDK for PHP Descargar. Después de la instalación, cree un archivo config.php con su APP_SID y APP_KEY.
Optimización del rendimiento del procesamiento de JSON grande
- Transmitir el archivo JSON - leer línea por línea en lugar de cargar todo el archivo en memoria.
- Reutilizar la instancia BarCodeApi - crear un nuevo cliente para cada registro agrega sobrecarga.
- Limitar la resolución del código de barras - 300 dpi es suficiente para la mayoría de los informes; valores más bajos reducen el tamaño de la carga útil.
- Escribir filas CSV en lotes - almacenar en búfer algunas filas antes de llamar a
fputcsvpara minimizar la E/S de disco.
Consejos prácticos para una conversión eficiente de JSON a CSV
- Utilice un punto y coma (
;) o una tabulación (\t) como delimitador cuando sus datos puedan contener comas. - Codifique los caracteres no ASCII con UTF‑8 y añada un BOM (
\xEF\xBB\xBF) al principio para compatibilidad con Excel. - Almacene las imágenes de códigos de barras como cadenas Base64 dentro del CSV para mantener el archivo autocontenido.
- Limpie la carpeta temporal de códigos de barras después de cada ejecución para evitar el desorden en el disco.
- Valide las líneas JSON con
json_last_error()para omitir registros mal formados de forma elegante.
Conclusión
Esta guía le mostró un ejemplo completo de código JSON a CSV en PHP usando el Aspose.BarCode Cloud SDK for PHP. Aprendió cómo configurar el SDK, generar códigos de barras para cada registro, manejar delimitadores personalizados y codificación UTF‑8, y aplicar optimizaciones de rendimiento para conjuntos de datos grandes. El SDK es un producto comercial; puede adquirir una licencia para uso en producción o obtener una licencia temporal desde la página de licencia temporal para evaluar la biblioteca. Comience a integrar el código hoy y agilice sus flujos de intercambio de datos.
Preguntas frecuentes
Q: ¿Cómo maneja el ejemplo de código JSON a CSV en PHP los objetos anidados?
A: Las matrices u objetos anidados se convierten en una cadena JSON usando json_encode antes de escribirlos en el CSV, garantizando que el CSV permanezca plano mientras se conserva la información original. Para más detalles, consulte la documentación de Aspose.BarCode Cloud SDK for PHP.
Q: ¿Puedo cambiar el delimitador CSV en el script JSON a CSV en PHP?
A: Sí, modifique la variable $delimiter al inicio del script (por ejemplo, establézcala en ',' para un archivo separado por comas). El script respeta cualquier delimitador de un solo carácter que proporcione.
Q: ¿Hay alguna forma de procesar miles de registros JSON de manera eficiente?
A: Absolutamente. La sección de rendimiento del tutorial recomienda transmitir el archivo de entrada, reutilizar el cliente API y escribir filas en lotes. Estas técnicas reducen el uso de memoria y aceleran el procesamiento de archivos JSON grandes.
Q: ¿La utilidad JSON a CSV en PHP admite otros formatos de código de barras?
A: La variable $barcodeFormat puede establecerse en cualquier simbología compatible con Aspose.BarCode, como QR, DataMatrix o Code39. Simplemente actualice el valor antes de ejecutar el script.
Leer más
- Guardar código de barras en formato BMP, SVG, GIF y TIFF usando Aspose.BarCode for Cloud 18.3
- Compatibilidad con el código de barras CodablockF y lectura de código de barras desde el cuerpo de la solicitud usando Aspose.BarCode for cloud 17.4
- Nuevo SDK de Perl para generación y reconocimiento de códigos de barras usando potentes API de Aspose.Barcode Cloud APIs