Преобразование записей JSON в формат CSV часто требуется для создания отчетов и обмена данными в современных приложениях на PHP. Aspose.BarCode Cloud SDK for PHP предоставляет мощный API для генерации изображений штрих‑кодов и обработки преобразований файлов непосредственно с вашего сервера. В этом руководстве вы увидите полный пример кода преобразования JSON в CSV на PHP, который также встраивает изображения штрих‑кодов для каждой записи. Мы пройдемся по настройке, пошаговой реализации, альтернативе с cURL и лучшим практикам производительности.
Как преобразовать данные JSON в CSV в PHP – пошагово
- Установите SDK через Composer: используйте официальный пакет Composer, чтобы добавить библиотеку в ваш проект.
composer require aspose-barcode-cloud
- Настройте учетные данные API и создайте экземпляр BarCodeApi: замените
YOUR_APP_SIDиYOUR_APP_KEYвашими облачными учетными данными.
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);
Reference: BarCodeApi class.
- Откройте исходный файл JSON и целевой файл CSV: скрипт работает с файловыми потоками, чтобы снизить использование памяти.
$inputHandle = fopen($inputJsonPath, 'rb');
$outputHandle = fopen($outputCsvPath, 'wb');
- Итерируйте записи JSON, генерируйте штрихкоды и записывайте строки CSV: поле
idкаждой записи преобразуется в изображение штрихкода, кодируется в base64 и добавляется в 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
// ...
}
- Очистите временные файлы и закройте потоки: временная папка удаляется после обработки.
fclose($inputHandle);
fclose($outputHandle);
array_map('unlink', glob($barcodeTempDir . '/*.png'));
rmdir($barcodeTempDir);
Генерация CSV‑вывода из JSON в PHP – полный пример кода
Следующий пример демонстрирует полную реализацию чтения JSON‑файла, создания изображений штрих‑кодов и записи данных в CSV‑файл с использованием 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);
Примечание: Этот пример кода демонстрирует базовый функционал. Прежде чем использовать его в вашем проекте, убедитесь, что обновили пути к файлам (
input.json,output.csvи т.д.) в соответствии с вашими реальными расположениями, проверьте, что все необходимые зависимости правильно установлены, и тщательно протестируйте в вашей среде разработки. Если возникнут проблемы, обратитесь к официальной документации или свяжитесь с командой поддержки для получения помощи.
Creating CSV via REST API from JSON Using cURL
Вы можете достичь того же результата без написания кода PHP, вызывая REST‑конечные точки Aspose.BarCode Cloud напрямую. Рабочий процесс состоит из загрузки JSON‑файла, генерации штрих‑кода для каждой записи и загрузки окончательного CSV.
- Получить токен доступа (замените заполнители вашими учётными данными).
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"
Ответ содержит access_token.
- Загрузите исходный JSON‑файл.
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
- Создайте штрих‑код для одной записи (повторите для каждой записи в скрипте).
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
-
Соберите CSV‑файл (вы можете использовать простой скрипт, который читает загруженный JSON, вставляет barcode, закодированный в base64, и записывает CSV).
Шаг сборки выполняется локально; API не предоставляет прямой JSON‑to‑CSV endpoint. -
Скачайте полученный CSV.
curl -X GET "https://api.aspose.cloud/v3.0/barcode/storage/file/output.csv" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-o data/output.csv
Для полного списка параметров см. официальную документацию API.
Подготовка окружения
Чтобы начать программировать, вам нужен runtime PHP (7.4 или новее) и действующий аккаунт Aspose.BarCode Cloud.
composer require aspose-barcode-cloud
Скачайте пакет SDK с официальной страницы релизов: Aspose.BarCode Cloud SDK for PHP Download. После установки создайте файл config.php с вашими APP_SID и APP_KEY.
Optimizing Large JSON Processing Performance
- Потоковая обработка JSON‑файла - читайте построчно вместо загрузки всего файла в память.
- Повторное использование экземпляра BarCodeApi - создание нового клиента для каждой записи добавляет накладные расходы.
- Ограничьте разрешение штрих‑кода - 300 dpi достаточно для большинства отчетов; более низкие значения уменьшают размер полезной нагрузки.
- Записывайте строки CSV пакетами - буферизуйте несколько строк перед вызовом
fputcsv, чтобы минимизировать ввод‑вывод на диск.
Практические советы для эффективного преобразования JSON в CSV
- Используйте точку с запятой (
;) или табуляцию (\t) в качестве разделителя, если ваши данные могут содержать запятые. - Кодируйте символы, не входящие в ASCII, в UTF‑8 и добавляйте BOM (
\xEF\xBB\xBF) для совместимости с Excel. - Сохраняйте изображения штрих‑кодов как строки Base64 внутри CSV, чтобы файл был автономным.
- Очищайте временную папку штрих‑кодов после каждой операции, чтобы избежать захламления диска.
- Проверяйте строки JSON с помощью
json_last_error(), чтобы пропускать некорректные записи без сбоев.
Заключение
В этом руководстве вы прошли полный пример кода преобразования JSON в CSV на PHP с использованием Aspose.BarCode Cloud SDK for PHP. Вы узнали, как настроить SDK, генерировать штрихкоды для каждой записи, работать с пользовательскими разделителями и кодировкой UTF‑8, а также применять оптимизации производительности для больших наборов данных. SDK является коммерческим продуктом; вы можете приобрести лицензию для использования в продакшене или получить временную лицензию со страницы временной лицензии для оценки библиотеки. Начните интегрировать код уже сегодня и упростите свои конвейеры обмена данными.
Часто задаваемые вопросы
В: Как пример кода JSON в CSV на PHP обрабатывает вложенные объекты?
О: Вложенные массивы или объекты преобразуются в строку JSON с помощью json_encode перед записью в CSV, обеспечивая плоскую структуру CSV при сохранении исходных данных. Для получения более подробной информации см. документацию Aspose.BarCode Cloud SDK для PHP.
Q: Могу ли я изменить разделитель CSV в скрипте JSON в CSV на PHP?
A: Да, измените переменную $delimiter в начале скрипта (например, установите её в ',' для файла с разделителем‑запятой). Скрипт поддерживает любой односимвольный разделитель, который вы укажете.
Q: Есть ли способ эффективно обрабатывать тысячи записей JSON?
A: Конечно. В разделе о производительности руководства рекомендуется потоковая передача входного файла, повторное использование клиента API и запись строк пакетами. Эти методы снижают использование памяти и ускоряют обработку больших файлов JSON.
Q: Поддерживает ли утилита JSON в CSV на PHP другие форматы штрихкодов?
A: Переменная $barcodeFormat может быть установлена на любую символьную систему, поддерживаемую Aspose.BarCode, такую как QR, DataMatrix или Code39. Просто обновите значение перед запуском скрипта.
Читать дальше
- Сохранить штрих‑код в форматах BMP, SVG, GIF и TIFF с использованием Aspose.BarCode for Cloud 18.3
- Поддержка штрих‑кода CodablockF и чтение штрих‑кода из тела запроса с использованием Aspose.BarCode for cloud 17.4
- Новый Perl SDK для генерации и распознавания штрих‑кодов с использованием мощных API Aspose.Barcode Cloud