원시 JSON 데이터를 정제된 XLSX 보고서로 변환하는 것은 분석 대시보드를 개발하는 Python 개발자들에게 자주 필요한 작업입니다. Aspose.BarCode Cloud SDK for Python은 클라우드에서 바코드 생성 및 파일 처리를 간소화하는 강력한 라이브러리를 제공합니다. 이 가이드에서는 SDK 설정부터 바코드 이미지 생성 및 최종 스프레드시트 내보내기까지 Python에서 JSON을 XLSX로 변환하는 방법을 배웁니다. 끝까지 진행하면 프로덕션 워크로드에 사용할 수 있는 재사용 가능한 스크립트를 얻게 됩니다.
시작하기 전에: 전제 조건 및 설치
이 튜토리얼을 따라하려면 다음이 필요합니다:
- 머신에 설치된 Python 3.7 이상.
- 선택한 IDE 또는 텍스트 편집기(VS Code, PyCharm 등).
- Client Id와 Client Secret이 포함된 Aspose Cloud 계정.
- 클라우드 API 호출을 위한 인터넷 액세스.
pip으로 필요한 패키지를 설치합니다:
pip install aspose-barcode-cloud openpyxl
수동 설치를 원하시면 공식 릴리스 페이지에서 SDK를 다운로드하십시오: Download Aspose.BarCode Cloud SDK for Python.
API 호출을 하기 전에 자격 증명을 구성하십시오:
from asposebarcodecloud import Configuration
CLIENT_ID = "YOUR_CLIENT_ID"
CLIENT_SECRET = "YOUR_CLIENT_SECRET"
config = Configuration()
config.host = "https://api.aspose.cloud"
config.api_key["client_id"] = CLIENT_ID
config.api_key["client_secret"] = CLIENT_SECRET
환경이 준비되었으니 구현으로 넘어갈 수 있습니다.
단계별 구축: Python에서 JSON을 XLSX로 변환
1단계: 소스 JSON 파일 로드
내보내려는 데이터를 포함하는 JSON 배열을 읽습니다.
import json
INPUT_JSON_PATH = "input.json"
with open(INPUT_JSON_PATH, "r", encoding="utf-8") as f:
json_data = json.load(f) # expects a list of dictionaries
2단계: 워크북 및 헤더 행 준비
OpenPyXL을 사용하여 Excel 워크북을 만들고 열 헤더를 씁니다.
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
wb = Workbook()
ws = wb.active
ws.title = "Data"
columns = list(json_data[0].keys())
columns.append("BarcodeImage") # extra column for the barcode
for col_idx, col_name in enumerate(columns, start=1):
ws.cell(row=1, column=col_idx, value=col_name)
3단계: 바코드 이미지 생성
Aspose.BarCode Cloud를 사용하여 각 레코드에 대해 PNG 바코드를 생성합니다.
BarcodeApi.generate_barcode에 대한 API 참조는 API 참조에서 확인할 수 있습니다.
from asposebarcodecloud import BarcodeApi, GenerateBarcodeRequest, EncodeBarcodeType, ApiClient
from asposebarcodecloud.rest import ApiException
barcode_api = BarcodeApi(ApiClient(config))
def generate_barcode_image(text: str,
barcode_type: EncodeBarcodeType = EncodeBarcodeType.CODE_128) -> bytes:
request = GenerateBarcodeRequest(text=text, type=barcode_type, format="png")
try:
response = barcode_api.generate_barcode(request)
return response.read()
except ApiException as e:
print(f"Error generating barcode for '{text}': {e}")
raise
단계 4: 워크시트에 바코드 삽입
중복된 API 호출을 방지하기 위해 동일한 바코드를 캐시한 후 이미지를 삽입합니다.
import io
from openpyxl.drawing.image import Image as XLImage
barcode_cache = {}
for row_idx, record in enumerate(json_data, start=2):
# write regular fields
for col_idx, field_name in enumerate(columns[:-1], start=1):
ws.cell(row=row_idx, column=col_idx, value=record.get(field_name, ""))
# barcode generation / caching
barcode_source = str(record.get("code", f"row{row_idx}"))
img_bytes = barcode_cache.get(barcode_source) or generate_barcode_image(barcode_source)
barcode_cache[barcode_source] = img_bytes
img_stream = io.BytesIO(img_bytes)
img = XLImage(img_stream)
img.width, img.height = 150, 50 # optional size adjustment
img_cell = f"{get_column_letter(len(columns))}{row_idx}"
ws.add_image(img, img_cell)
5단계: 열 자동 크기 조정 및 워크북 저장
파일을 마무리하고 디스크에 저장합니다.
for col_idx in range(1, len(columns) + 1):
column_letter = get_column_letter(col_idx)
ws.column_dimensions[column_letter].width = 20
OUTPUT_XLSX_PATH = "output.xlsx"
wb.save(OUTPUT_XLSX_PATH)
print(f"Conversion complete. XLSX saved to '{OUTPUT_XLSX_PATH}'.")
이러한 단계들을 통해 JSON을 XLSX로 변환하는 작업이 완료되었으며, 이제 각 행에는 Aspose.BarCode에서 생성된 바코드 이미지가 포함됩니다.
Python에서 전체 JSON을 XLSX 스크립트로 변환 - 전체 코드 예제
다음 예제는 Aspose.BarCode Cloud SDK for Python을 사용한 JSON에서 XLSX로 변환하는 엔드‑투‑엔드 구현을 보여줍니다.
import json
import os
import io
from typing import Dict, Any, List
import asposebarcodecloud
from asposebarcodecloud import (
BarcodeApi,
GenerateBarcodeRequest,
EncodeBarcodeType,
Configuration,
ApiClient,
)
from asposebarcodecloud.rest import ApiException
from openpyxl import Workbook
from openpyxl.drawing.image import Image as XLImage
from openpyxl.utils import get_column_letter
# -------------------- Aspose.BarCode Cloud Setup --------------------
# Replace these placeholders with your actual Aspose Cloud credentials.
CLIENT_ID = "YOUR_CLIENT_ID"
CLIENT_SECRET = "YOUR_CLIENT_SECRET"
config = Configuration()
config.host = "https://api.aspose.cloud"
config.api_key["client_id"] = CLIENT_ID
config.api_key["client_secret"] = CLIENT_SECRET
barcode_api = BarcodeApi(ApiClient(config))
def generate_barcode_image(text: str, barcode_type: EncodeBarcodeType = EncodeBarcodeType.CODE_128) -> bytes:
"""
Calls Aspose.BarCode Cloud to generate a barcode image for the given text.
Returns raw PNG bytes.
"""
request = GenerateBarcodeRequest(
text=text,
type=barcode_type,
format="png"
)
try:
response = barcode_api.generate_barcode(request)
# response is a file-like object; read its content.
return response.read()
except ApiException as e:
print(f"Error generating barcode for '{text}': {e}")
raise
# -------------------- JSON to XLSX Conversion --------------------
INPUT_JSON_PATH = "input.json"
OUTPUT_XLSX_PATH = "output.xlsx"
# Load JSON data (expects a list of dictionaries)
with open(INPUT_JSON_PATH, "r", encoding="utf-8") as f:
json_data: List[Dict[str, Any]] = json.load(f)
if not isinstance(json_data, list):
raise ValueError("JSON root must be an array of objects.")
# Prepare workbook
wb = Workbook()
ws = wb.active
ws.title = "Data"
# Determine column order from first record
columns = list(json_data[0].keys())
# Append a column for the barcode image
barcode_column_name = "BarcodeImage"
columns.append(barcode_column_name)
# Write header row
for col_idx, col_name in enumerate(columns, start=1):
ws.cell(row=1, column=col_idx, value=col_name)
# Cache to avoid regenerating identical barcodes
barcode_cache: Dict[str, bytes] = {}
# Process each JSON record
for row_idx, record in enumerate(json_data, start=2):
# Write regular fields
for col_idx, field_name in enumerate(columns[:-1], start=1):
value = record.get(field_name, "")
ws.cell(row=row_idx, column=col_idx, value=value)
# Generate or retrieve barcode image for a specific field (e.g., "code")
barcode_source = str(record.get("code", f"row{row_idx}"))
if barcode_source in barcode_cache:
img_bytes = barcode_cache[barcode_source]
else:
img_bytes = generate_barcode_image(barcode_source)
barcode_cache[barcode_source] = img_bytes
# Insert barcode image into the last column of the current row
img_stream = io.BytesIO(img_bytes)
img = XLImage(img_stream)
# Adjust image size (optional)
img.width, img.height = 150, 50
img_cell = f"{get_column_letter(len(columns))}{row_idx}"
ws.add_image(img, img_cell)
# Auto‑size columns (basic heuristic)
for col_idx, _ in enumerate(columns, start=1):
column_letter = get_column_letter(col_idx)
ws.column_dimensions[column_letter].width = 20
# Save workbook
wb.save(OUTPUT_XLSX_PATH)
print(f"Conversion complete. XLSX saved to '{OUTPUT_XLSX_PATH}'.")
참고: 이 코드 예제는 핵심 기능을 보여줍니다. 프로젝트에서 사용하기 전에, 파일 경로(
input.json,output.xlsx등)를 실제 파일 위치에 맞게 업데이트했는지 확인하고, 필요한 모든 종속성이 올바르게 설치되었는지 확인하며, 개발 환경에서 충분히 테스트하십시오. 문제가 발생하면, 공식 문서를 참조하거나 지원 팀 에 문의하십시오.
cURL 및 REST API를 사용한 동일 작업 실행
순수 REST 방식을 선호한다면, 몇 가지 cURL 명령으로 동일한 결과를 얻을 수 있습니다. 워크플로는 Python 구현을 그대로 반영합니다: 액세스 토큰을 얻고, JSON 파일을 업로드하고, 바코드를 생성하고, XLSX 파일을 만들고, 결과를 다운로드합니다.
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이 포함되어 있으며, 이후 호출에서 사용할 수 있습니다.
2. 소스 JSON 파일을 Aspose Cloud Storage에 업로드
curl -X PUT "https://api.aspose.cloud/v3.0/storage/file/input.json" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
--data-binary @input.json
3. 샘플 값에 대한 바코드 이미지 생성
curl -X POST "https://api.aspose.cloud/v3.0/barcode/generate" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"text": "SampleCode123",
"type": "Code128",
"format": "png"
}' \
-o barcode.png
4. Aspose.Cells Cloud를 사용하여 JSON을 XLSX로 변환
curl -X POST "https://api.aspose.cloud/v3.0/cells/convert?format=xlsx" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"FileName":"input.json"}' \
-o output.xlsx
5. 결과 XLSX 파일 다운로드
curl -X GET "https://api.aspose.cloud/v3.0/storage/file/output.xlsx" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-o output.xlsx
이 명령은 코드를 작성하지 않고도 동일한 JSON을 XLSX로 변환하는 방법을 보여줍니다. 자세한 내용은 공식 API 문서를 참조하십시오.
최적 결과를 위한 변환 옵션 구성
Aspose.BarCode Cloud는 프로젝트에 맞게 조정할 수 있는 여러 매개변수를 제공합니다:
- 바코드 유형 - 다음 중 선택하십시오
EncodeBarcodeType.CODE_128,EncodeBarcodeType.QR,EncodeBarcodeType.PDF_417등. - 이미지 형식 - PNG가 기본값이며,
format필드를 변경하여jpeg또는gif를 요청할 수 있습니다. - 이미지 크기 - 스크립트에서
img.width와img.height를 조정하여 해상도를 제어합니다. - 열 너비 -
ws.column_dimensions[column_letter].width를 수정하여 더 긴 텍스트에 맞춥니다.
바코드 유형 및 이미지 형식 변경 예시:
def generate_barcode_image(text: str,
barcode_type: EncodeBarcodeType = EncodeBarcodeType.QR,
image_format: str = "jpeg") -> bytes:
request = GenerateBarcodeRequest(
text=text,
type=barcode_type,
format=image_format
)
response = barcode_api.generate_barcode(request)
return response.read()
대용량 JSON 데이터 세트의 성능 최적화
수천 개의 레코드를 처리할 때는 다음 최적화를 고려하십시오:
- 전체 파일을 로드하는 대신 JSON 스트리밍 -
ijson을 사용하여 전체 목록을 메모리에 보관하지 않고 레코드를 반복합니다. - 반복 바코드 캐시 - 샘플 코드의
barcode_cache사전은 동일한 값에 대한 중복 API 호출을 방지합니다. - 이미지를 현명하게 크기 조정 - 작은 바코드 이미지는 메모리 사용량을 줄이고 워크북 저장 속도를 높입니다.
- 행을 일괄 쓰기 - OpenPyXL은 행을 대량으로 기록할 수 있게 하며, 쓰기를 그룹화하면 오버헤드를 줄일 수 있습니다.
이러한 팁을 적용하면 대용량 데이터 세트에서도 변환 속도가 빠르고 메모리 효율성을 유지할 수 있습니다.
결론
JSON을 XLSX로 변환하는 작업은 Aspose.BarCode Cloud SDK for Python의 강력한 기능을 활용하면 Python에서 간단해집니다. 이 가이드는 환경 설정, 바코드 생성, 워크북 생성 및 성능 튜닝을 단계별로 안내하여 보고 파이프라인 구축을 위한 탄탄한 기반을 제공합니다. 상용 라이선스가 프로덕션 배포에 필요함을 기억하십시오; 제품 페이지에서 가격 옵션을 확인하거나 임시 라이선스 페이지에서 임시 라이선스를 얻을 수 있습니다. 제공된 코드와 모범 사례 권장 사항을 통해 애플리케이션에 신뢰할 수 있는 데이터 내보내기 기능을 통합할 준비가 되었습니다.
FAQs
-
Python에서 자체 바코드 로직을 작성하지 않고 JSON을 XLSX로 변환하려면 어떻게 구현할 수 있나요?
전체 코드 예제에 나와 있듯이 Aspose.BarCode Cloud SDK를 사용하여 바코드를 자동으로 생성하고 OpenPyXL과 결합하여 Excel을 생성합니다. -
JSON 입력에서 누락된 필드를 처리하는 권장 방법은 무엇인가요?
record.get("field_name", "")를 사용하여 사전 값을 접근하고 기본 빈 문자열을 제공함으로써 워크시트 채우기 중 런타임 오류를 방지합니다. -
JSON 파일 크기에 제한이 있나요?
클라우드 API 자체에는 명확한 제한이 없지만, 매우 큰 파일의 경우 성능 섹션에 설명된 대로 JSON을 스트리밍하고 바코드를 캐시해야 합니다. -
XLSX 파일을 만들 때 Aspose.Cells에 별도의 라이선스가 필요합니까?
아니요. XLSX 생성은 OpenPyXL을 사용하여 로컬에서 수행되므로 클라우드 호출에 대해서는 Aspose.BarCode Cloud SDK에만 라이선스가 필요합니다.