Chuyển đổi các bản ghi JSON sang định dạng CSV là một yêu cầu thường gặp cho việc báo cáo và trao đổi dữ liệu trong các ứng dụng PHP hiện đại. Aspose.BarCode Cloud SDK for PHP cung cấp một API mạnh mẽ để tạo hình ảnh mã vạch và xử lý chuyển đổi tệp trực tiếp từ máy chủ của bạn. Trong hướng dẫn này, bạn sẽ thấy một ví dụ mã hoàn chỉnh chuyển đổi JSON sang CSV trong PHP, đồng thời nhúng hình ảnh mã vạch cho mỗi bản ghi. Chúng tôi sẽ hướng dẫn qua quá trình cài đặt, triển khai từng bước, một giải pháp thay thế bằng cURL, và các thực tiễn tốt nhất về hiệu suất.
Cách Chuyển Đổi Dữ Liệu JSON Sang CSV trong PHP - Bước Từng Bước
- Cài đặt SDK qua Composer: Sử dụng gói Composer chính thức để thêm thư viện vào dự án của bạn.
composer require aspose-barcode-cloud
- Cấu hình thông tin xác thực API và tạo thể hiện BarCodeApi: Thay thế
YOUR_APP_SIDvàYOUR_APP_KEYbằng thông tin xác thực đám mây của bạn.
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);
Tham chiếu: BarCodeApi class. 3. Mở tệp JSON nguồn và tệp CSV đích: Kịch bản hoạt động với các luồng tệp để giảm mức sử dụng bộ nhớ.
$inputHandle = fopen($inputJsonPath, 'rb');
$outputHandle = fopen($outputCsvPath, 'wb');
- Lặp qua các bản ghi JSON, tạo mã vạch và ghi các hàng CSV: Trường
idcủa mỗi bản ghi được chuyển thành hình ảnh mã vạch, mã hoá base64 và thêm vào 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
// ...
}
- Dọn dẹp các tệp tạm thời và đóng các luồng: Thư mục tạm thời được xóa sau khi xử lý.
fclose($inputHandle);
fclose($outputHandle);
array_map('unlink', glob($barcodeTempDir . '/*.png'));
rmdir($barcodeTempDir);
Tạo đầu ra CSV từ JSON trong PHP - Ví dụ mã đầy đủ
Ví dụ sau đây trình bày việc triển khai đầy đủ việc đọc tệp JSON, tạo hình ảnh mã vạch và ghi dữ liệu vào tệp CSV bằng 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);
Lưu ý: Ví dụ mã này minh họa chức năng cốt lõi. Trước khi sử dụng trong dự án của bạn, hãy chắc chắn cập nhật các đường dẫn tệp (
input.json,output.csv, v.v.) để phù hợp với vị trí tệp thực tế của bạn, xác minh rằng tất cả các phụ thuộc cần thiết đã được cài đặt đúng cách, và kiểm tra kỹ lưỡng trong môi trường phát triển. Nếu bạn gặp bất kỳ vấn đề nào, vui lòng tham khảo tài liệu chính thức hoặc liên hệ với đội hỗ trợ để được trợ giúp.
Tạo CSV qua REST API từ JSON bằng cURL
Bạn có thể đạt được kết quả tương tự mà không cần viết mã PHP bằng cách gọi trực tiếp các endpoint REST của Aspose.BarCode Cloud. Quy trình bao gồm tải lên tệp JSON, tạo mã vạch cho mỗi bản ghi và tải xuống tệp CSV cuối cùng.
- Lấy token truy cập (thay thế các placeholder bằng thông tin xác thực của bạn).
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"
Phản hồi chứa access_token.
- Tải lên tệp JSON nguồn.
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
- Tạo mã vạch cho một bản ghi duy nhất (lặp lại cho mỗi bản ghi trong một script).
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
-
Ghép tệp CSV (bạn có thể sử dụng một script đơn giản để đọc JSON đã tải lên, chèn mã vạch đã mã hoá base64, và ghi ra CSV).
Bước ghép tệp được thực hiện cục bộ; API không cung cấp endpoint trực tiếp chuyển JSON sang CSV. -
Tải xuống CSV kết quả.
curl -X GET "https://api.aspose.cloud/v3.0/barcode/storage/file/output.csv" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-o data/output.csv
Để xem danh sách đầy đủ các tham số, hãy tham khảo tài liệu API chính thức.
Chuẩn bị môi trường
Để bắt đầu lập trình, bạn cần một môi trường chạy PHP (7.4 hoặc mới hơn) và một tài khoản Aspose.BarCode Cloud hợp lệ.
composer require aspose-barcode-cloud
Tải gói SDK từ trang phát hành chính thức: Aspose.BarCode Cloud SDK for PHP Download. Sau khi cài đặt, tạo một tệp config.php với APP_SID và APP_KEY của bạn.
Tối ưu hiệu suất xử lý JSON lớn
- Đọc luồng tệp JSON - đọc từng dòng thay vì tải toàn bộ tệp vào bộ nhớ.
- Tái sử dụng thể hiện BarCodeApi - việc tạo một client mới cho mỗi bản ghi sẽ gây tốn tài nguyên.
- Giới hạn độ phân giải mã vạch - 300 dpi là đủ cho hầu hết các báo cáo; các giá trị thấp hơn sẽ giảm kích thước tải lên.
- Ghi các hàng CSV theo lô - đệm một vài hàng trước khi gọi
fputcsvđể giảm thiểu I/O đĩa.
Mẹo thực tiễn để chuyển đổi JSON sang CSV hiệu quả
- Sử dụng dấu chấm phẩy (
;) hoặc tab (\t) làm ký tự phân tách khi dữ liệu của bạn có thể chứa dấu phẩy. - Mã hoá các ký tự không phải ASCII bằng UTF‑8 và thêm BOM (
\xEF\xBB\xBF) ở đầu để tương thích với Excel. - Lưu hình ảnh mã vạch dưới dạng chuỗi Base64 trong CSV để tệp tự chứa.
- Dọn dẹp thư mục tạm thời chứa mã vạch sau mỗi lần chạy để tránh lộn xộn ổ đĩa.
- Kiểm tra các dòng JSON bằng
json_last_error()để bỏ qua các bản ghi bị lỗi một cách nhẹ nhàng.
Kết luận
Hướng dẫn này đã đưa bạn qua một ví dụ đầy đủ về chuyển đổi JSON sang CSV bằng PHP sử dụng Aspose.BarCode Cloud SDK for PHP. Bạn đã học cách cấu hình SDK, tạo mã vạch cho mỗi bản ghi, xử lý các ký tự phân tách tùy chỉnh và mã hoá UTF‑8, cũng như áp dụng các tối ưu hoá hiệu năng cho các bộ dữ liệu lớn. SDK là một sản phẩm thương mại; bạn có thể mua giấy phép để sử dụng trong môi trường sản xuất hoặc lấy giấy phép tạm thời từ trang giấy phép tạm thời để đánh giá thư viện. Hãy bắt đầu tích hợp mã ngay hôm nay và tối ưu hoá quy trình trao đổi dữ liệu của bạn.
Câu hỏi thường gặp
Q: Làm thế nào ví dụ mã JSON sang CSV trong PHP xử lý các đối tượng lồng nhau?
A: Các mảng hoặc đối tượng lồng nhau được chuyển thành chuỗi JSON bằng cách sử dụng json_encode trước khi ghi vào CSV, đảm bảo CSV vẫn phẳng trong khi giữ nguyên dữ liệu gốc. Để biết thêm chi tiết, xem tài liệu Aspose.BarCode Cloud SDK for PHP documentation.
Q: Tôi có thể thay đổi ký tự phân tách CSV trong script JSON sang CSV bằng PHP không?
A: Có, hãy sửa biến $delimiter ở đầu script (ví dụ, đặt nó thành ',' cho tệp phân tách bằng dấu phẩy). Script sẽ tôn trọng bất kỳ ký tự phân tách đơn ký tự nào bạn cung cấp.
Q: Có cách nào để xử lý hàng ngàn bản ghi JSON một cách hiệu quả không?
A: Chắc chắn rồi. Phần hiệu năng của hướng dẫn đề xuất việc stream tệp đầu vào, tái sử dụng client API, và ghi các hàng theo lô. Những kỹ thuật này giảm việc sử dụng bộ nhớ và tăng tốc độ xử lý cho các tệp JSON lớn.
Q: Tiện ích JSON sang CSV trong PHP có hỗ trợ các định dạng mã vạch khác không?
A: Biến $barcodeFormat có thể được đặt thành bất kỳ ký hiệu nào được Aspose.BarCode hỗ trợ, chẳng hạn như QR, DataMatrix hoặc Code39. Chỉ cần cập nhật giá trị trước khi chạy script.