JSON 레코드를 CSV 형식으로 변환하는 것은 최신 PHP 애플리케이션에서 보고 및 데이터 교환을 위해 자주 요구됩니다. Aspose.BarCode Cloud SDK for PHP는 서버에서 직접 바코드 이미지를 생성하고 파일 변환을 처리할 수 있는 강력한 API를 제공합니다. 이 튜토리얼에서는 각 레코드에 바코드 이미지를 포함하는 PHP의 완전한 JSON to 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);
Reference: 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);
Generating CSV Output from JSON in PHP - Complete Code Example
다음 예제는 JSON 파일을 읽고, 바코드 이미지를 생성하며, Aspose.BarCode Cloud SDK for PHP를 사용하여 데이터를 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등)를 실제 파일 위치에 맞게 업데이트하고, 모든 필수 종속성이 올바르게 설치되었는지 확인한 뒤 개발 환경에서 충분히 테스트하십시오. 문제가 발생하면 공식 문서를 참조하거나 지원 팀에 문의하십시오.
Creating CSV via REST API from JSON Using cURL
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‑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 다운로드. 설치 후, APP_SID와 APP_KEY가 포함된 config.php 파일을 생성합니다.
대용량 JSON 처리 성능 최적화
- JSON 파일 스트리밍 - 전체 파일을 메모리에 로드하는 대신 한 줄씩 읽습니다.
- BarCodeApi 인스턴스 재사용 - 레코드마다 새 클라이언트를 생성하면 오버헤드가 발생합니다.
- 바코드 해상도 제한 - 대부분의 보고서에 300 dpi이면 충분하며, 낮은 값은 페이로드 크기를 줄입니다.
- CSV 행을 배치로 쓰기 -
fputcsv를 호출하기 전에 몇 개의 행을 버퍼링하여 디스크 I/O를 최소화합니다.
효율적인 JSON에서 CSV 변환을 위한 실용적인 팁
- 데이터에 쉼표가 포함될 수 있는 경우 구분자로 세미콜론(
;) 또는 탭(\t)을 사용하십시오. - 비ASCII 문자는 UTF‑8로 인코딩하고 Excel 호환성을 위해 BOM(
\xEF\xBB\xBF)을 앞에 추가하십시오. - CSV 내부에 바코드 이미지를 Base64 문자열로 저장하여 파일이 자체 포함되도록 하십시오.
- 디스크 혼잡을 방지하기 위해 각 실행 후 임시 바코드 폴더를 정리하십시오.
json_last_error()를 사용하여 JSON 라인을 검증하고 손상된 레코드를 우아하게 건너뛰십시오.
결론
이 가이드는 Aspose.BarCode Cloud SDK for PHP를 사용하여 PHP에서 JSON을 CSV로 변환하는 전체 코드 예제를 단계별로 안내했습니다. SDK를 구성하고, 각 레코드에 대한 바코드를 생성하며, 사용자 정의 구분자와 UTF‑8 인코딩을 처리하고, 대용량 데이터 세트에 대한 성능 최적화를 적용하는 방법을 배웠습니다. SDK는 상용 제품이며, 프로덕션 사용을 위해 라이선스를 구매하거나 라이브러리를 평가하기 위해 임시 라이선스 페이지에서 임시 라이선스를 얻을 수 있습니다. 오늘 코드를 통합하여 데이터 교환 파이프라인을 효율화하세요.
자주 묻는 질문
Q: PHP에서 JSON을 CSV로 변환하는 코드 예제는 중첩 객체를 어떻게 처리합니까?
A: 중첩된 배열이나 객체는 CSV에 기록하기 전에 json_encode를 사용하여 JSON 문자열로 변환됩니다. 이렇게 하면 CSV가 평평한 형태를 유지하면서 원본 데이터를 보존할 수 있습니다. 자세한 내용은 Aspose.BarCode Cloud SDK for PHP 문서를 참조하십시오.
Q: PHP의 JSON to CSV 스크립트에서 CSV 구분자를 변경할 수 있나요?
A: 예, 스크립트 상단의 $delimiter 변수를 수정하면 됩니다(예: 콤마 구분 파일의 경우 ',' 로 설정). 스크립트는 제공한 단일 문자 구분자를 그대로 사용합니다.
Q: 수천 개의 JSON 레코드를 효율적으로 처리할 방법이 있나요?
A: 물론입니다. 튜토리얼의 성능 섹션에서는 입력 파일을 스트리밍하고, API 클라이언트를 재사용하며, 행을 배치로 작성할 것을 권장합니다. 이러한 기술은 메모리 사용량을 줄이고 대용량 JSON 파일 처리 속도를 높입니다.
Q: PHP의 JSON을 CSV로 변환하는 유틸리티가 다른 바코드 형식을 지원하나요?
A: $barcodeFormat 변수는 Aspose.BarCode에서 지원하는 모든 심볼리지를 설정할 수 있습니다. 예를 들어 QR, DataMatrix, Code39 등이 있습니다. 스크립트를 실행하기 전에 값을 업데이트하면 됩니다.