การแปลงบันทึก JSON เป็นรูปแบบ CSV เป็นความต้องการที่พบบ่อยสำหรับการรายงานและการแลกเปลี่ยนข้อมูลในแอปพลิเคชัน PHP สมัยใหม่. Aspose.BarCode Cloud SDK for PHP ให้ API ที่มีประสิทธิภาพสำหรับการสร้างภาพบาร์โค้ดและการจัดการการแปลงไฟล์โดยตรงจากเซิร์ฟเวอร์ของคุณ. ในบทเรียนนี้คุณจะเห็นตัวอย่างโค้ดการแปลง JSON เป็น CSV อย่างสมบูรณ์ใน PHP ที่ยังฝังภาพบาร์โค้ดสำหรับแต่ละบันทึก. เราจะเดินผ่านการตั้งค่า การดำเนินการทีละขั้นตอน ตัวเลือก cURL และแนวปฏิบัติที่ดีที่สุดด้านประสิทธิภาพ.
วิธีแปลงข้อมูล JSON เป็น CSV ใน PHP - ขั้นตอนโดยละเอียด
- ติดตั้ง SDK ผ่าน Composer: ใช้แพ็กเกจ Composer อย่างเป็นทางการเพื่อเพิ่มไลบรารีลงในโครงการของคุณ.
composer require aspose-barcode-cloud
- กำหนดค่า API credentials และสร้างอินสแตนซ์ 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);
การสร้างผลลัพธ์ 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 endpoint ของ Aspose.BarCode Cloud โดยตรง กระบวนการทำงานประกอบด้วยการอัปโหลดไฟล์ 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 ไม่ได้ให้ endpoint ที่แปลง 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 runtime (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 ขนาดใหญ่
- สตรีมไฟล์ JSON - อ่านทีละบรรทัดแทนการโหลดไฟล์ทั้งหมดเข้าสู่หน่วยความจำ.
- ใช้ตัวอย่าง BarCodeApi ซ้ำ - การสร้างไคลเอนต์ใหม่สำหรับแต่ละบันทึกทำให้เกิดภาระเพิ่มขึ้น.
- จำกัดความละเอียดของบาร์โค้ด - 300 dpi เพียงพอสำหรับรายงานส่วนใหญ่; ค่าที่ต่ำกว่าจะลดขนาดข้อมูลที่ส่ง.
- เขียนแถว 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 นี้เป็นผลิตภัณฑ์เชิงพาณิชย์; คุณสามารถซื้อใบอนุญาตสำหรับการใช้งานในสภาพแวดล้อมการผลิตหรือรับใบอนุญาตชั่วคราวจากหน้า temporary license page เพื่อประเมินไลบรารี. เริ่มผสานรวมโค้ดวันนี้และทำให้กระบวนการแลกเปลี่ยนข้อมูลของคุณเป็นระเบียบและมีประสิทธิภาพ.
FAQs
Q: โค้ดตัวอย่างการแปลง JSON เป็น CSV ใน PHP จัดการกับอ็อบเจ็กต์ที่ซ้อนกันอย่างไร?
A: อาร์เรย์หรืออ็อบเจ็กต์ที่ซ้อนกันจะถูกแปลงเป็นสตริง JSON ด้วย json_encode ก่อนที่จะเขียนลงใน 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 เพียงอัปเดตค่าก่อนรันสคริปต์.