JSON レコードを CSV 形式に変換することは、最新の PHP アプリケーションにおけるレポート作成やデータ交換の頻繁な要件です。 Aspose.BarCode Cloud SDK for PHP は、サーバーから直接バーコード画像を生成し、ファイル変換を処理する強力な API を提供します。このチュートリアルでは、各レコードにバーコード画像を埋め込んだ完全な JSON から CSV への PHP コード例をご紹介します。セットアップ、ステップバイステップの実装、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);
JSONからPHPでCSV出力を生成する - 完全なコード例
以下の例は、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など)を実際のファイル位置に合わせて更新し、すべての必須依存関係が正しくインストールされていることを確認し、開発環境で徹底的にテストしてください。問題が発生した場合は、公式ドキュメント または サポートチーム にお問い合わせください。
cURL を使用した JSON から REST API による CSV の作成
PHP コードを書かずに、Aspose.BarCode Cloud の REST エンドポイントを直接呼び出すことで同じ結果を得ることができます。ワークフローは、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 から 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ファイルをストリーム処理 - ファイル全体をメモリに読み込むのではなく、1行ずつ読み取ります。
- BarCodeApiインスタンスを再利用 - 各レコードごとに新しいクライアントを作成するとオーバーヘッドが増えます。
- バーコード解像度を制限 - 300 dpiでほとんどのレポートに十分です。解像度を下げるとペイロードサイズが削減されます。
- CSV行をバッチで書き込む -
fputcsvを呼び出す前に数行をバッファリングして、ディスクI/Oを最小化します。
効率的な JSON から CSV への変換の実践的ヒント
- データにカンマが含まれる可能性がある場合は、区切り文字としてセミコロン(
;)またはタブ(\t)を使用します。 - 非 ASCII 文字は UTF‑8 でエンコードし、Excel 互換性のために BOM(
\xEF\xBB\xBF)を前置します。 - バーコード画像は CSV 内に Base64 文字列として保存し、ファイルを自己完結型に保ちます。
- ディスクの乱雑化を防ぐため、各実行後に一時的なバーコードフォルダーをクリーンアップします。
json_last_error()を使用して JSON 行を検証し、形式が不正なレコードを適切にスキップします。
Conclusion
このガイドでは、Aspose.BarCode Cloud SDK for PHP を使用した PHP における JSON から CSV への完全なコード例を順を追って説明しました。SDK の設定方法、各レコードのバーコード生成、カスタム区切り文字と UTF‑8 エンコーディングの処理、そして大規模データセット向けのパフォーマンス最適化について学びました。SDK は商用製品です。製品を本番環境で使用するにはライセンスを購入するか、一時ライセンスページ から一時ライセンスを取得してライブラリを評価できます。ぜひ本日からコードを統合し、データ交換パイプラインを効率化しましょう。
FAQs
Q: PHP の JSON から CSV へのコード例は、入れ子オブジェクトをどのように処理しますか?
A: 入れ子の配列やオブジェクトは、CSV に書き込む前に json_encode を使用して JSON 文字列に変換されます。これにより、CSV はフラットなまま元のデータを保持します。詳細については、Aspose.BarCode Cloud SDK for PHP documentation を参照してください。
Q: PHPのJSONからCSVへのスクリプトでCSV区切り文字を変更できますか?
A: はい、スクリプトの先頭にある $delimiter 変数を変更してください(例: カンマ区切りファイルの場合は ',' に設定)。スクリプトは提供された任意の1文字区切り文字を尊重します。
Q: 数千件のJSONレコードを効率的に処理する方法はありますか?
A: はい、あります。チュートリアルのパフォーマンスセクションでは、入力ファイルをストリーミングし、APIクライアントを再利用し、行をバッチで書き込むことが推奨されています。これらの手法により、メモリ使用量が削減され、大規模なJSONファイルの処理速度が向上します。
Q: PHP の JSON から CSV ユーティリティは他のバーコード形式をサポートしていますか?
A: $barcodeFormat 変数は Aspose.BarCode がサポートする任意のシンボロジーに設定できます。たとえば QR、DataMatrix、Code39 などです。スクリプトを実行する前に値を更新するだけです。