تبدیل رکوردهای 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. 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 دانلود. پس از نصب، یک فایل config.php با APP_SID و APP_KEY خود ایجاد کنید.

بهینه‌سازی عملکرد پردازش JSON بزرگ

  1. جریان‌سازی فایل JSON - به‌جای بارگذاری کل فایل در حافظه، خط به خط بخوانید.
  2. استفاده مجدد از نمونه BarCodeApi - ایجاد یک مشتری جدید برای هر رکورد باعث اضافه بار می‌شود.
  3. محدود کردن وضوح بارکد - 300 dpi برای اکثر گزارش‌ها کافی است؛ مقادیر کمتر اندازه بار را کاهش می‌دهند.
  4. نوشتن ردیف‌های CSV به صورت دسته‌ای - قبل از فراخوانی fputcsv چند ردیف را بافر کنید تا I/O دیسک به حداقل برسد.

نکات عملی برای تبدیل کارآمد JSON به CSV

  • از نقطه‌ویرگول (;) یا تب (\t) به عنوان جداکننده استفاده کنید وقتی داده‌های شما ممکن است شامل کاماها باشد.
  • کاراکترهای غیر‑ASCII را با UTF‑8 رمزگذاری کنید و برای سازگاری با اکسل، یک BOM (\xEF\xBB\xBF) پیشوندی اضافه کنید.
  • تصاویر بارکد را به‌صورت رشته‌های Base64 داخل CSV ذخیره کنید تا فایل به‌صورت خودکفا باقی بماند.
  • پس از هر اجرا پوشه موقت بارکد را پاک کنید تا از شلوغی دیسک جلوگیری شود.
  • سطرهای JSON را با json_last_error() اعتبارسنجی کنید تا به‌صورت ملایم رکوردهای خراب را نادیده بگیرید.

نتیجه‌گیری

این راهنما شما را در یک مثال کامل کد JSON به CSV در PHP با استفاده از Aspose.BarCode Cloud SDK for PHP راهنمایی کرد. شما آموختید که چگونه SDK را پیکربندی کنید، بارکدها را برای هر رکورد تولید کنید، جداکننده‌های سفارشی و رمزگذاری UTF‑8 را مدیریت کنید، و بهینه‌سازی‌های عملکردی را برای مجموعه‌داده‌های بزرگ اعمال کنید. SDK یک محصول تجاری است؛ می‌توانید برای استفاده در تولید یک لایسنس خریداری کنید یا برای ارزیابی کتابخانه، لایسنس موقت را از صفحه لایسنس موقت دریافت کنید. امروز شروع به ادغام کد کنید و خطوط لوله تبادل داده‌های خود را بهینه‌سازی کنید.

سؤالات متداول

پرسش: مثال کد JSON به CSV در PHP چگونه اشیاء تو در تو را مدیریت می‌کند؟
پاسخ: آرایه‌ها یا اشیاء تو در تو با استفاده از json_encode به رشته JSON تبدیل می‌شوند قبل از اینکه به CSV نوشته شوند، به‌طوری که CSV صاف باقی بماند و در عین حال داده‌های اصلی حفظ شوند. برای جزئیات بیشتر، به Aspose.BarCode Cloud SDK for PHP documentation مراجعه کنید.

Q: آیا می‌توانم جداکننده CSV را در اسکریپت JSON به CSV در PHP تغییر دهم؟
A: بله، متغیر $delimiter را در بالای اسکریپت تغییر دهید (به عنوان مثال، آن را به ',' تنظیم کنید تا فایل با کاما جدا شود). اسکریپت هر جداکننده تک‌کاراکتری که ارائه کنید را می‌پذیرد.

Q: آیا راهی برای پردازش هزاران رکورد JSON به‌صورت کارآمد وجود دارد؟
A: قطعاً. بخش عملکرد آموزش توصیه می‌کند که فایل ورودی را به‌صورت استریم کنید، کلاینت API را مجدداً استفاده کنید و ردیف‌ها را به‌صورت دسته‌ای بنویسید. این تکنیک‌ها مصرف حافظه را کاهش داده و پردازش فایل‌های بزرگ JSON را سرعت می‌بخشند.

Q: آیا ابزار JSON به CSV در PHP از سایر فرمت‌های بارکد پشتیبانی می‌کند؟
A: متغیر $barcodeFormat می‌تواند به هر سمبولی که توسط Aspose.BarCode پشتیبانی می‌شود تنظیم شود، مانند QR، DataMatrix یا Code39. فقط مقدار را قبل از اجرای اسکریپت به‌روزرسانی کنید.

بیشتر بخوانید