Как перевести JSON в XLSX без ошибок? Онлайн-конвертер и советы
- Python-библиотека pandas с openpyxl позволяет конвертировать JSON в XLSX за 3 строки кода.
- Онлайн-конвертер JSON в XLSX поддерживает глубоко вложенные JSON-структуры до 10 МБ.
- При конвертации вложенных JSON-объектов без flatten столбцы превращаются в строки с JSON-строками — это частая ошибка.
- Формулы и условное форматирование не переносятся из JSON — XLSX создаётся как простые данные.
- 1. Базовый способ: Python + pandas
- 2. Работа с вложенными JSON-объектами (flatten)
- 3. Обработка массивов и неоднородных данных
- 4. Команды и параметры pandas для конвертации
- 5. Онлайн-конвертеры: когда код не подходит
- 6. Сравнение Python vs онлайн-конвертер
- 7. Подводные камни и частые ошибки
- 8. Отладка: что делать, если конвертация не удалась
1. Базовый способ: Python + pandas
Самый гибкий способ — написать скрипт на Python. Установите две библиотеки:
pip install pandas openpyxlПример для плоского JSON-массива (список объектов с одинаковыми ключами):
import pandas as pd
import json
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
df = pd.json_normalize(data)
df.to_excel('output.xlsx', index=False, engine='openpyxl')q — ключевой параметр: index=False убирает лишний столбец с номерами строк. engine='openpyxl' обязателен для записи .xlsx.
Если ваш JSON — один объект, заверните его в список: [data].
Для вложенных структур используйте json_normalize с параметром record_path и meta. Подробнее — в разделе 4.
2. Работа с вложенными JSON-объектами (flatten)
Частая проблема: JSON содержит вложенные объекты (например, адрес внутри пользователя). Без flatten каждый вложенный объект станет строкой с {'street': '...', 'city': '...'} в одной ячейке — непригодно для анализа.
Решение — использовать pd.json_normalize:
import pandas as pd
import json
with open('nested.json') as f:
data = json.load(f)
df = pd.json_normalize(data, sep='_')
df.to_excel('flat.xlsx', index=False)Параметр sep='_' определяет разделитель между уровнями: address_street.
Для массивов внутри JSON укажите record_path (путь к массиву) и meta (поля из родительского объекта):
df = pd.json_normalize(data, record_path='items', meta=['id', 'name'])Если структура глубже 2 уровней — лучше сначала написать рекурсивный flatten, либо воспользоваться онлайн-инструментом JSON в XLSX, который делает flatten автоматически.
3. Обработка массивов и неоднородных данных
Когда JSON содержит массивы разной длины или неоднородные объекты (разные ключи), pandas заполняет пропуски NaN. Это нормально, но может быть нежелательно.
Пример: один пользователь имеет 3 телефона, другой — 1. После flatten для короткого массива появятся пустые ячейки.
Как избежать пустых ячеек?
- Разделить на отдельные строки: используйте
explodeдля массива. Например,df.explode('phones')создаст по строке на каждый телефон. - Объединить в строку:
df['phones'] = df['phones'].apply(lambda x: '; '.join(x))
Для неоднородных объектов принудительно приведите к единой схеме: df = pd.DataFrame(data).fillna('')
Совет: если данные не влезают в Excel (более 1 048 576 строк), используйте формат .csv или разделите на несколько листов с pd.ExcelWriter.4. Команды и параметры pandas для конвертации
| Команда | Параметры | Описание |
|---|---|---|
pd.json_normalize | record_path, meta, sep | Разворачивает вложенные JSON в плоский DataFrame |
df.to_excel | index, engine, sheet_name | Записывает DataFrame в Excel-файл |
df.explode | - | Преобразует каждый элемент списка в отдельную строку |
pd.read_json | orient | Читает JSON в DataFrame (для простых структур) |
Параметр orient в pd.read_json бывает: 'records' (список объектов), 'index' (словарь с индексами), 'columns' (словарь столбцов). Для большинства случаев используйте orient='records'.
Пример с read_json:
df = pd.read_json('data.json', orient='records')
df.to_excel('output.xlsx', index=False)Но учтите: read_json не умеет flatten, поэтому лучше загружать через json.load и затем json_normalize.
- 1Загрузка JSON
Открыть файл с помощью json.load
- 2Нормализация
Преобразовать в DataFrame через json_normalize
- 3Чистка данных
Заполнить NaN, объединить массивы при необходимости
- 4Запись в Excel
to_excel с openpyxl и index=False
- 5Проверка
Открыть Excel, проверить столбцы и строки
5. Онлайн-конвертеры: когда код не подходит
Скрипт не всегда удобен: нет Python под рукой, файл на телефоне, срочно нужно одному человеку. Тут выручают онлайн-сервисы.
Наш сайт предлагает несколько инструментов:
- JSON в XLSX — прямой конвертер с flatten и поддержкой UTF-8
- CSV в XLSX — если у вас уже CSV
- JSON в CSV — промежуточный шаг для больших файлов
- XLSX в CSV — обратная конвертация
Онлайн-конвертеры обычно автоматически определяют разделители и кодировку, но у них есть ограничения: размер файла (часто до 10-50 МБ) и конфиденциальность данных — не загружайте чувствительные данные на непроверенные сайты.
Наш конвертер JSON в XLSX обрабатывает файлы до 10 МБ и не сохраняет данные на сервере после конвертации.
6. Сравнение Python vs онлайн-конвертер
| Критерий | Python | Онлайн-конвертер |
|---|---|---|
| Скорость настройки | 5-10 минут | 1-2 минуты |
| Гибкость | Полный контроль | Ограниченная |
| Размер данных | Без ограничений | До ~10 МБ |
| Конфиденциальность | Полная (локально) | Риск утечки |
| Flatten авто | Настраивается | Автоматический |
Вывод: для разовых небольших задач (до 10 МБ, несекретные данные) — онлайн. Для регулярной обработки, больших объёмов или конфиденциальной информации — Python.
Кстати, если вам нужно сначала привести JSON к CSV (например, для загрузки в Excel как CSV), используйте JSON в CSV, а потом CSV в XLSX.
7. Подводные камни и частые ошибки
- Кодировка: русские буквы превращаются в кракозябры. Решение: всегда указывайте
encoding='utf-8'при открытии файла и при записи. - Огромные файлы: Excel не поддерживает более 1 048 576 строк и 16 384 столбцов. Python выдаст ошибку при попытке записать больший DataFrame. Используйте .csv или разбивайте на листы.
- Null и NaN: пустые значения в Excel отображаются как пустые ячейки или #N/A. Можно заполнить
fillna(''). - Формулы и стили: конвертация чистых данных не переносит формулы. Если нужны формулы — добавляйте их после конвертации средствами Excel.
- Вложенные объекты: без flatten вы получите ячейки с содержимым типа
{'a':1}— бесполезно.
Всегда проверяйте результат конвертации на небольшом тестовом JSON перед обработкой большого файла.
8. Отладка: что делать, если конвертация не удалась
- Проверьте JSON на валидность — используйте JSONLint (не наш домен, но доверенный).
- Убедитесь, что JSON — массив объектов, а не один объект. Если это объект, оберните его в
[...]. - Посмотрите структуру в Python: выведите первые записи
print(data[:2]). - Попробуйте
pd.json_normalizeс повышением разупрощения: если не работает, распечатайте ключи и решите, какие поля нужны. - Используйте онлайн-инструмент для отладки: загрузите тот же JSON в JSON в XLSX и скачайте результат — если он корректен, проблема в вашем скрипте.
- Проверьте установку библиотек:
import pandasиimport openpyxlбез ошибок.
Если после всех шагов проблема осталась — опишите структуру JSON в техподдержку (пример строки).
🧮 Посчитайте сами — инструменты по теме
🧭 Разделы по теме
Частые вопросы
Как конвертировать JSON в XLSX онлайн бесплатно?
Используйте наш инструмент JSON в XLSX. Загрузите файл или вставьте текст, нажмите «Конвертировать» и скачайте результат. Бесплатно, до 10 МБ.
Как преобразовать вложенный JSON в плоскую таблицу Excel?
Python: используйте pd.json_normalize с параметрами record_path и meta. В онлайн-конвертере flatten выполняется автоматически.
Что делать, если после конвертации русские буквы отображаются как '?' или 'Ролы ?
Проверьте кодировку: при чтении JSON укажите encoding='utf-8'. В онлайн-конвертере убедитесь, что выбрана UTF-8.
Можно ли конвертировать JSON в XLSX без Python?
Да, через онлайн-сервисы: JSON в XLSX или конвертеры в Excel (данные > получить данные > из JSON).
Как обработать JSON с массивом в Excel — чтобы каждый элемент массива был в отдельной строке?
В Python используйте df.explode('array_column'). В онлайн-конвертере это делается автоматически или выберите опцию «развернуть массивы».
Есть ли ограничение на размер JSON при конвертации в XLSX?
Онлайн-инструменты обычно ограничены 5-10 МБ. Python без ограничений, но Excel не поддерживает более 1 048 576 строк.
Как сохранить форматирование (цвета, шрифты) из JSON при конвертации?
JSON не содержит информации о форматировании. После конвертации добавьте стили вручную в Excel или с помощью openpyxl.
Чем отличается конвертация JSON в XLSX от JSON в CSV?
XLSX — бинарный формат Excel с поддержкой листов, формул, стилей. CSV — текстовый, проще, но без форматирования. Для больших данных удобнее CSV.
Источники и нормативные документы
- pandas документация — json_normalize
- openpyxl документация
- JSONLint — валидатор JSON