Конвертування JSON записів у формат CSV є частою вимогою для звітності та обміну даними у сучасних PHP додатках. Aspose.BarCode Cloud SDK for PHP надає потужний API для створення зображень штрих‑коду та обробки перетворень файлів безпосередньо з вашого сервера. У цьому підручнику ви побачите повний приклад коду JSON у CSV на PHP, який також вбудовує зображення штрих‑коду для кожного запису. Ми пройдемо налаштування, покрокову реалізацію, альтернативу cURL та кращі практики продуктивності.

Як перетворити дані JSON у CSV у PHP - крок за кроком

  1. Встановіть SDK за допомогою Composer: Використайте офіційний пакет Composer, щоб додати бібліотеку до вашого проєкту.
composer require aspose-barcode-cloud
  1. Налаштуйте облікові дані 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);

Посилання: BarCodeApi class. 3. Відкрийте вихідний файл JSON та цільовий файл CSV: Скрипт працює з файловими потоками, щоб знизити використання пам’яті.

$inputHandle  = fopen($inputJsonPath, 'rb');
$outputHandle = fopen($outputCsvPath, 'wb');
  1. Пройдіться по записах 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
    // ...
}
  1. Очистіть тимчасові файли та закрийте потоки: Тимчасова папка видаляється після обробки.
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 тощо), щоб вони відповідали фактичним розташуванням ваших файлів, перевірте, що всі необхідні залежності встановлені правильно, і ретельно протестуйте у вашому середовищі розробки. Якщо ви зіткнетеся з будь-якими проблемами, будь ласка, зверніться до офіційної документації або до команди підтримки за допомогою.

Створення CSV за допомогою REST API з JSON за допомогою cURL

Ви можете досягти того ж результату без написання коду PHP, безпосередньо викликаючи REST‑конечні точки Aspose.BarCode Cloud. Робочий процес включає завантаження файлу JSON, генерацію штрих‑коду для кожного запису та завантаження готового CSV.

  1. Отримайте токен доступу (замініть заповнювачі вашими обліковими даними).
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.

  1. Завантажте вихідний 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
  1. Створити штрих-код для одного запису (повторити для кожного запису у скрипті).
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
  1. Зберіть CSV‑файл (можете використати простий скрипт, який читає завантажений JSON, вставляє base64‑закодований штрих‑код і записує CSV).
    Крок збирання виконується локально; API не надає прямого JSON‑в‑CSV кінцевого пункту.

  2. Завантажте отриманий 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.

Підготовка середовища

Щоб розпочати кодування, вам потрібне середовище виконання 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.

Оптимізація продуктивності обробки великих JSON

  1. Потокове читання JSON‑файлу - читайте рядок за рядком замість завантаження всього файлу в пам’ять.
  2. Повторне використання екземпляра BarCodeApi - створення нового клієнта для кожного запису додає накладні витрати.
  3. Обмежте роздільну здатність штрихкоду - 300 dpi достатньо для більшості звітів; нижчі значення зменшують розмір передаваних даних.
  4. Записуйте рядки 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 є комерційним продуктом; ви можете придбати ліцензію для використання у продакшн або отримати тимчасову ліцензію зі сторінки тимчасової ліцензії, щоб оцінити бібліотеку. Почніть інтегрувати код вже сьогодні та оптимізуйте ваші конвеєри обміну даними.

Питання та відповіді

Q: Як приклад коду JSON у CSV на PHP обробляє вкладені об’єкти?
A: Вкладені масиви або об’єкти конвертуються у рядок JSON за допомогою json_encode перед записом у CSV, забезпечуючи плоску структуру CSV при збереженні оригінальних даних. Для отримання додаткової інформації перегляньте Aspose.BarCode Cloud SDK for PHP documentation.

Q: Чи можу я змінити розділювач CSV у скрипті JSON to CSV на PHP?
A: Так, змініть змінну $delimiter у верхній частині скрипту (наприклад, встановіть її в ',' для файлу, розділеного комами). Скрипт підтримує будь‑який однобайтний розділювач, який ви вкажете.

Q: Чи існує спосіб ефективно обробляти тисячі записів JSON?
A: Звичайно. У розділі про продуктивність підручника рекомендовано потокове читання вхідного файлу, повторне використання клієнта API та запис рядків пакетами. Ці методи зменшують використання пам’яті та прискорюють обробку великих JSON‑файлів.

Q: Чи підтримує утиліта JSON до CSV у PHP інші формати штрих‑кодів?
A: Змінна $barcodeFormat може бути встановлена на будь‑яку символьну систему, підтримувану Aspose.BarCode, наприклад QR, DataMatrix або Code39. Просто оновіть значення перед запуском скрипту.

Читати далі