將 JSON 記錄轉換為 CSV 格式是現代 PHP 應用程式中常見的報告與資料交換需求。Aspose.BarCode Cloud SDK for PHP 提供強大的 API,能直接從伺服器產生條碼影像並處理檔案轉換。在本教學中,您將看到一個完整的 PHP JSON 轉 CSV 程式範例,並為每筆記錄嵌入條碼影像。我們將逐步說明設定、一步一步的實作、cURL 替代方案,以及效能最佳實踐。
如何在 PHP 中將 JSON 資料轉換為 CSV - 步驟說明
- 透過 Composer 安裝 SDK:使用官方的 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);
參考資料: BarCodeApi class. 3. 開啟來源 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);
在 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.json、output.csv等)以符合實際檔案位置,驗證所有必要的相依項目已正確安裝,並在開發環境中徹底測試。 若遇到任何問題,請參閱官方文件或聯繫支援團隊以獲得協助。
使用 cURL 從 JSON 透過 REST API 建立 CSV
您可以直接呼叫 Aspose.BarCode Cloud REST 端點,而無需編寫 PHP 程式碼,即可達成相同的結果。工作流程包括上傳 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,插入 base64‑編碼的條碼,並寫入 CSV)。
組裝步驟在本機執行;API 不提供直接的 JSON‑to‑CSV 端點。 -
下載產生的 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_SID 和 APP_KEY 的 config.php 檔案。
優化大型 JSON 處理效能
- 串流 JSON 檔案 - 逐行讀取,而不是將整個檔案載入記憶體。
- 重複使用 BarCodeApi 實例 - 為每筆記錄建立新客戶端會增加額外負擔。
- 限制條碼解析度 - 300 dpi 對大多數報告已足夠;較低的數值可減少負載大小。
- 批次寫入 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 支援的任何符號集,例如 QR、DataMatrix 或 Code39。只需在執行腳本前更新該值。