JSON 記錄轉換為 CSV 格式是現代 PHP 應用程式中常見的報告與資料交換需求。Aspose.BarCode Cloud SDK for PHP 提供強大的 API,能直接從伺服器產生條碼影像並處理檔案轉換。在本教學中,您將看到一個完整的 PHP JSON 轉 CSV 程式範例,並為每筆記錄嵌入條碼影像。我們將逐步說明設定、一步一步的實作、cURL 替代方案,以及效能最佳實踐。

如何在 PHP 中將 JSON 資料轉換為 CSV - 步驟說明

  1. 透過 Composer 安裝 SDK:使用官方的 Composer 套件將函式庫加入您的專案。
composer require aspose-barcode-cloud
  1. 設定 API 憑證並建立 BarCodeApi 實例:將 YOUR_APP_SIDYOUR_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);

在 PHP 中從 JSON 生成 CSV 輸出 - 完整代碼示例

以下範例展示了使用 Aspose.BarCode Cloud SDK for PHP 完整實作:讀取 JSON 檔案、建立條碼影像,並將資料寫入 CSV 檔案。

<?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.jsonoutput.csv 等)以符合實際檔案位置,驗證所有必要的相依項目已正確安裝,並在開發環境中徹底測試。 若遇到任何問題,請參閱官方文件或聯繫支援團隊以獲得協助。

使用 cURL 從 JSON 透過 REST API 建立 CSV

您可以直接呼叫 Aspose.BarCode Cloud REST 端點,而無需編寫 PHP 程式碼,即可達成相同的結果。工作流程包括上傳 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‑to‑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。安裝完成後,建立一個包含您的 APP_SIDAPP_KEYconfig.php 檔案。

優化大型 JSON 處理效能

  1. 串流 JSON 檔案 - 逐行讀取,而不是將整個檔案載入記憶體。
  2. 重複使用 BarCodeApi 實例 - 為每筆記錄建立新客戶端會增加額外負擔。
  3. 限制條碼解析度 - 300 dpi 對大多數報告已足夠;較低的數值可減少負載大小。
  4. 批次寫入 CSV 行 - 在呼叫 fputcsv 前緩衝數行,以減少磁碟 I/O。

實用技巧:高效的 JSON 轉 CSV 轉換

  • 當資料可能包含逗號時,使用分號 (;) 或制表符 (\t) 作為分隔符。
  • 使用 UTF‑8 編碼非 ASCII 字元,並在檔案開頭加入 BOM (\xEF\xBB\xBF) 以確保 Excel 相容性。
  • 將條碼影像以 Base64 字串儲存在 CSV 內,使檔案保持自包含。
  • 每次執行後清理暫存條碼資料夾,以避免磁碟雜亂。
  • 使用 json_last_error() 驗證 JSON 行,優雅地跳過格式錯誤的記錄。

Conclusion

本指南帶您使用 Aspose.BarCode Cloud SDK for PHP 完成了 PHP 中的 JSON 轉 CSV 完整程式範例。您學會了如何配置 SDK、為每筆記錄產生條碼、處理自訂分隔符與 UTF‑8 編碼,並對大型資料集套用效能最佳化。此 SDK 為商業產品;您可以購買正式授權以供生產環境使用,或從temporary license page取得臨時授權以評估此函式庫。立即開始整合程式碼,簡化您的資料交換流程。

常見問題

Q: PHP 中的 JSON 轉 CSV 範例程式碼如何處理巢狀物件?
A: 巢狀陣列或物件會先使用 json_encode 轉換成 JSON 字串,然後寫入 CSV,確保 CSV 保持平面結構,同時保留原始資料。欲了解更多資訊,請參閱 Aspose.BarCode Cloud SDK for PHP documentation.

Q: 我可以在 PHP 的 JSON 轉 CSV 腳本中更改 CSV 分隔符嗎?
A: 可以,請在腳本頂部修改 $delimiter 變數(例如,將其設為 ',' 以使用逗號分隔的檔案)。腳本會尊重您提供的任何單一字符分隔符。

Q: 有沒有辦法有效地處理成千上萬的 JSON 記錄?
A: 當然可以。教程的效能部分建議串流輸入檔案、重複使用 API 客戶端,並以批次寫入資料列。這些技巧可減少記憶體使用量,並加快大型 JSON 檔案的處理速度。

Q: PHP 中的 JSON 轉 CSV 工具是否支援其他條碼格式?
A: $barcodeFormat 變數可以設定為 Aspose.BarCode 支援的任何符號集,例如 QRDataMatrixCode39。只需在執行腳本前更新該值。

Read More