Chuyển đổi dữ liệu JSON thô thành các báo cáo XLSX được tinh chỉnh là một nhu cầu thường gặp đối với các nhà phát triển Python làm việc trên các bảng điều khiển phân tích. Aspose.BarCode Cloud SDK for Python cung cấp một thư viện mạnh mẽ giúp đơn giản hoá việc tạo mã vạch và xử lý tệp trong đám mây. Trong hướng dẫn này, bạn sẽ học cách chuyển đổi JSON sang XLSX trong Python, từ việc thiết lập SDK đến tạo hình ảnh mã vạch và xuất bảng tính cuối cùng. Khi kết thúc, bạn sẽ có một script có thể tái sử dụng, sẵn sàng cho các tải công việc sản xuất.

Trước Khi Bắt Đầu: Các Yêu Cầu và Cài Đặt

Để làm theo hướng dẫn này, bạn cần:

  • Python 3.7 hoặc mới hơn được cài đặt trên máy của bạn.
  • Một IDE hoặc trình soạn thảo văn bản mà bạn lựa chọn (VS Code, PyCharm, v.v.).
  • Một tài khoản Aspose Cloud với Client IdClient Secret.
  • Kết nối internet để thực hiện các cuộc gọi API đám mây.

Cài đặt các gói cần thiết bằng pip:

pip install aspose-barcode-cloud openpyxl

Tải SDK từ trang phát hành chính thức nếu bạn muốn cài đặt thủ công: Tải Aspose.BarCode Cloud SDK for Python.

Cấu hình thông tin xác thực của bạn trước khi thực hiện bất kỳ cuộc gọi API nào:

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

Khi môi trường đã sẵn sàng, chúng ta có thể chuyển sang việc triển khai.

Xây dựng từng bước: Chuyển đổi JSON sang XLSX trong Python

Bước 1: Tải tệp JSON nguồn

Đọc mảng JSON chứa dữ liệu bạn muốn xuất.

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

Bước 2: Chuẩn bị Workbook và Hàng tiêu đề

Tạo một workbook Excel bằng OpenPyXL và ghi các tiêu đề cột.

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)

Bước 3: Tạo hình ảnh mã vạch

Sử dụng Aspose.BarCode Cloud để tạo mã vạch định dạng PNG cho mỗi bản ghi.
Tham chiếu API cho BarcodeApi.generate_barcode có sẵn trong Tham chiếu 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

Bước 4: Chèn mã vạch vào Bảng tính

Lưu bộ nhớ đệm các mã vạch giống nhau để tránh các cuộc gọi API dư thừa, sau đó nhúng hình ảnh.

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)

Bước 5: Tự động điều chỉnh kích thước cột và lưu sổ làm việc

Hoàn thiện tệp và ghi nó vào đĩa.

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}'.")

Với các bước này, quá trình chuyển đổi JSON sang XLSX đã hoàn tất, và mỗi hàng hiện chứa một hình ảnh mã vạch được tạo bởi Aspose.BarCode.

Kịch bản JSON đầy đủ sang XLSX trong Python - Ví dụ mã hoàn chỉnh

Ví dụ sau đây trình bày việc triển khai đầu‑cuối‑đầu của việc chuyển đổi JSON sang XLSX bằng Aspose.BarCode Cloud SDK for Python.

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}'.")

Lưu ý: Ví dụ mã này trình bày 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.xlsx, 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.

Thực hiện cùng một tác vụ bằng cURL và REST API

Nếu bạn ưu tiên một cách tiếp cận thuần REST, bạn có thể đạt được kết quả tương tự bằng một vài lệnh cURL. Quy trình phản ánh triển khai Python: lấy token truy cập, tải lên tệp JSON, tạo mã vạch, tạo tệp XLSX và tải xuống kết quả.

1. Xác thực và nhận Access Token

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 mà bạn sẽ sử dụng trong các cuộc gọi tiếp theo.

2. Tải lên tệp JSON nguồn lên 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. Tạo hình ảnh mã vạch cho một giá trị mẫu

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. Chuyển đổi JSON sang XLSX bằng Aspose.Cells Cloud

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. Tải xuống tệp XLSX kết quả

curl -X GET "https://api.aspose.cloud/v3.0/storage/file/output.xlsx" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -o output.xlsx

Các lệnh này minh họa cách thực hiện chuyển đổi JSON sang XLSX mà không cần viết bất kỳ mã nào. Để biết thêm chi tiết, xem tài liệu API chính thức.

Cấu hình các tùy chọn chuyển đổi để đạt kết quả tối ưu

Aspose.BarCode Cloud cung cấp một số tham số mà bạn có thể điều chỉnh để phù hợp với dự án của mình:

  • Loại mã vạch - Chọn từ EncodeBarcodeType.CODE_128, EncodeBarcodeType.QR, EncodeBarcodeType.PDF_417, v.v.
  • Định dạng hình ảnh - PNG là mặc định, nhưng bạn có thể yêu cầu jpeg hoặc gif bằng cách thay đổi trường format.
  • Kích thước hình ảnh - Điều chỉnh img.widthimg.height trong script để kiểm soát độ phân giải.
  • Chiều rộng cột - Sửa đổi ws.column_dimensions[column_letter].width để phù hợp với văn bản dài hơn.

Ví dụ về việc thay đổi loại mã vạch và định dạng hình ảnh:

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()

Tối ưu hiệu suất cho các bộ dữ liệu JSON lớn

Khi xử lý hàng ngàn bản ghi, hãy xem xét các tối ưu hoá sau:

  1. Phát luồng JSON thay vì tải toàn bộ tệp - Sử dụng ijson để lặp qua các bản ghi mà không cần giữ toàn bộ danh sách trong bộ nhớ.
  2. Lưu trữ bộ nhớ đệm các mã vạch lặp lại - Từ điển barcode_cache trong mã mẫu ngăn các cuộc gọi API trùng lặp cho các giá trị giống nhau.
  3. Thay đổi kích thước hình ảnh một cách hợp lý - Hình ảnh mã vạch nhỏ hơn giảm việc sử dụng bộ nhớ và tăng tốc việc lưu workbook.
  4. Ghi hàng theo lô - OpenPyXL cho phép ghi nhiều hàng cùng lúc; việc nhóm ghi có thể giảm tải.

Áp dụng những mẹo này sẽ giúp quá trình chuyển đổi nhanh chóng và tiết kiệm bộ nhớ ngay cả với các bộ dữ liệu khổng lồ.

Kết luận

Việc chuyển đổi JSON sang XLSX trong Python trở nên đơn giản khi bạn tận dụng sức mạnh của Aspose.BarCode Cloud SDK for Python. Hướng dẫn này sẽ đưa bạn qua các bước thiết lập môi trường, tạo mã vạch, tạo workbook và tối ưu hiệu năng, cung cấp nền tảng vững chắc để xây dựng các pipeline báo cáo. Hãy nhớ rằng cần có giấy phép thương mại cho các triển khai sản xuất; bạn có thể khám phá các tùy chọn giá trên trang sản phẩm hoặc lấy giấy phép tạm thời từ trang giấy phép tạm thời. Với mã được cung cấp và các khuyến nghị thực hành tốt nhất, bạn đã sẵn sàng tích hợp chức năng xuất dữ liệu đáng tin cậy vào ứng dụng của mình.

FAQs

  • Làm thế nào tôi có thể thực hiện chuyển đổi JSON sang XLSX trong Python mà không phải tự viết logic mã vạch?
    Sử dụng Aspose.BarCode Cloud SDK để tự động tạo mã vạch và kết hợp nó với OpenPyXL để tạo file Excel, như được minh họa trong ví dụ mã đầy đủ.

  • Cách được khuyến nghị để xử lý các trường thiếu trong đầu vào JSON là gì?
    Truy cập các giá trị trong từ điển bằng record.get("field_name", "") để cung cấp một chuỗi rỗng mặc định, ngăn ngừa lỗi thời gian chạy khi điền dữ liệu vào worksheet.

  • Có giới hạn nào về kích thước của tệp JSON mà tôi có thể xử lý không?
    API đám mây không có giới hạn cứng, nhưng đối với các tệp rất lớn, bạn nên stream JSON và cache mã vạch, như đã mô tả trong phần hiệu năng.

  • Tôi có cần giấy phép riêng cho Aspose.Cells khi tạo tệp XLSX không?
    Không. Việc tạo XLSX được thực hiện cục bộ bằng OpenPyXL, vì vậy chỉ có Aspose.BarCode Cloud SDK cần giấy phép cho các cuộc gọi đám mây.

Đọc thêm