Преобразование сырых данных JSON в отшлифованные отчёты XLSX — частая необходимость для разработчиков Python, работающих над аналитическими панелями. Aspose.BarCode Cloud SDK for Python предоставляет мощную библиотеку, упрощающую генерацию штрих‑кодов и работу с файлами в облаке. В этом руководстве вы узнаете, как выполнять конвертацию JSON в XLSX на Python, начиная с настройки SDK и заканчивая созданием изображений штрих‑кодов и экспортом окончательной таблицы. К концу вы получите переиспользуемый скрипт, готовый к работе в производственной среде.

Перед началом: требования и установка

Для выполнения этого руководства вам понадобится:

  • Python 3.7 или новее, установленный на вашем компьютере.
  • IDE или текстовый редактор по вашему выбору (VS Code, PyCharm и т.д.).
  • Учётная запись Aspose Cloud с Client Id и Client Secret.
  • Доступ в Интернет для вызовов облачного 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

С готовой средой мы можем перейти к реализации.

Пошаговое построение: преобразование JSON в XLSX на Python

Шаг 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)   # ожидает список словарей

Шаг 2: Подготовьте рабочую книгу и строку заголовка

Создайте рабочую книгу Excel с помощью OpenPyXL и запишите заголовки столбцов.

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‑штрих‑кода для каждой записи.
Ссылка на API для BarcodeApi.generate_barcode доступна в справочнике 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.

Полный скрипт JSON в XLSX на Python - Полный пример кода

В следующем примере демонстрируется сквозная реализация преобразования JSON в XLSX с использованием 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}'.")

Примечание: Этот пример кода демонстрирует базовый функционал. Прежде чем использовать его в вашем проекте, убедитесь, что обновили пути к файлам (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. Конвертировать JSON в XLSX с помощью 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. Скачивание полученного файла 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, но вы можете запросить jpeg или gif, изменив поле format.
  • Размер изображения - Отрегулируйте 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

При работе с тысячами записей учитывайте следующие оптимизации:

  1. Потоковая обработка JSON вместо загрузки всего файла - Используйте ijson для итерации по записям без удержания всего списка в памяти.
  2. Кешировать повторяющиеся штрихкоды - Словарь barcode_cache в примере кода предотвращает дублирование вызовов API для одинаковых значений.
  3. Разумно изменять размер изображений - Меньшие изображения штрихкодов снижают использование памяти и ускоряют сохранение рабочей книги.
  4. Пакетная запись строк - OpenPyXL позволяет записывать строки пакетно; группировка записей может снизить накладные расходы.

Применение этих советов позволит сохранить быструю и экономичную по памяти конверсию даже для массивных наборов данных.

Заключение

Преобразование JSON в XLSX в Python становится простым, когда вы используете возможности Aspose.BarCode Cloud SDK for Python. Это руководство проведёт вас через настройку среды, генерацию штрих‑кодов, создание рабочей книги и оптимизацию производительности, предоставив прочную основу для построения конвейеров отчётности. Помните, что для развертывания в продакшн требуется коммерческая лицензия; вы можете изучить варианты ценообразования на странице продукта или получить временную лицензию со страницы временной лицензии. С предоставленным кодом и рекомендациями по лучшим практикам вы готовы интегрировать надёжную функцию экспорта данных в свои приложения.

FAQs

  • Как реализовать конвертацию JSON в XLSX в Python без написания собственной логики штрихкода?
    Используйте Aspose.BarCode Cloud SDK для автоматической генерации штрихкодов и объедините его с OpenPyXL для создания Excel, как показано в полном примере кода.

  • Какой рекомендуемый способ обработки отсутствующих полей в JSON‑вводе?
    Доступ к значениям словаря с помощью record.get("field_name", ""), чтобы предоставить пустую строку по умолчанию, предотвращая ошибки выполнения при заполнении листа.

  • Есть ли ограничения на размер JSON‑файла, который я могу обрабатывать?
    Сам API облака не имеет жёсткого ограничения, но для очень больших файлов следует потоково обрабатывать JSON и кэшировать штрихкоды, как описано в разделе о производительности.

  • Нужна ли отдельная лицензия для Aspose.Cells при создании файла XLSX?
    Нет. Генерация XLSX выполняется локально с помощью OpenPyXL, поэтому только Aspose.BarCode Cloud SDK требует лицензии для облачных вызовов.

Читать дальше