← Вернуться к блогу

Конвертация JSON в Excel: Полное руководство и инструменты

Подробное руководство по конвертации JSON данных в Excel: онлайн-инструменты, библиотеки, скрипты и лучшие практики для эффективной работы с данными.

Big JSON Team13 мин чтенияtools
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

13 мин чтения

# Конвертация JSON в Excel: Полное руководство

Конвертация JSON данных в Excel — распространенная задача при анализе данных, отчетности и обмене информацией с нетехническими пользователями. В этом руководстве мы рассмотрим все способы конвертации JSON в Excel.

Почему конвертировать JSON в Excel?

Преимущества Excel

  • Знакомый интерфейс — большинство пользователей знают Excel
  • Анализ данных — сортировка, фильтрация, сводные таблицы
  • Визуализация — графики и диаграммы
  • Формулы — сложные вычисления
  • Совместная работа — легко делиться файлами

Типичные сценарии

  • Экспорт данных из API
  • Отчеты для менеджмента
  • Анализ логов
  • Миграция данных
  • Обработка результатов исследований

Онлайн-инструменты

1. ConvertCSV.com

Возможности:
  • JSON to Excel (XLSX)
  • JSON to CSV
  • Простой интерфейс
  • Бесплатный

Использование:
  • Открыть convertcsv.com/json-to-excel
  • Вставить JSON
  • Нажать "Convert"
  • Скачать XLSX файл
  • Пример:

    Входной JSON:

    [
    

    {"имя": "Иван", "возраст": 30, "город": "Москва"},

    {"имя": "Мария", "возраст": 25, "город": "СПб"}

    ]

    Результат в Excel:

    | имя   | возраст | город  |
    

    |-------|---------|--------|

    | Иван | 30 | Москва |

    | Мария | 25 | СПб |

    2. JSON-CSV.com

    Особенности:
    • Настройка колонок
    • Обработка вложенных объектов
    • Выбор разделителя
    • Preview данных

    3. BeautifyTools JSON to Excel

    Функции:
    • Загрузка файлов до 50MB
    • Автоматическое определение структуры
    • Скачивание в разных форматах

    Python библиотеки

    pandas (Рекомендуется)

    Установка:
    pip install pandas openpyxl
    Простая конвертация:
    import pandas as pd
    

    import json

    # Загрузка JSON

    with open('data.json', 'r', encoding='utf-8') as f:

    данные = json.load(f)

    # Конвертация в DataFrame

    df = pd.DataFrame(данные)

    # Сохранение в Excel

    df.to_excel('output.xlsx', index=False, sheet_name='Данные')

    print("Конвертация завершена!")

    С форматированием:
    import pandas as pd
    
    

    # Чтение JSON

    df = pd.read_json('data.json')

    # Создание Excel writer

    with pd.ExcelWriter('formatted_output.xlsx', engine='openpyxl') as writer:

    df.to_excel(writer, sheet_name='Лист1', index=False)

    # Получить workbook и worksheet

    workbook = writer.book

    worksheet = writer.sheets['Лист1']

    # Автоширина колонок

    for column in worksheet.columns:

    max_length = 0

    column_letter = column[0].column_letter

    for cell in column:

    try:

    if len(str(cell.value)) > max_length:

    max_length = len(cell.value)

    except:

    pass

    adjusted_width = (max_length + 2) * 1.2

    worksheet.column_dimensions[column_letter].width = adjusted_width

    print("Excel файл создан с форматированием")

    openpyxl (Прямая работа с Excel)

    Базовый пример:
    import json
    

    from openpyxl import Workbook

    from openpyxl.styles import Font, PatternFill

    def json_to_excel(json_file, excel_file):

    # Загрузка JSON

    with open(json_file, 'r', encoding='utf-8') as f:

    данные = json.load(f)

    # Создание workbook

    wb = Workbook()

    ws = wb.active

    ws.title = "Данные"

    # Если данные - это список объектов

    if isinstance(данные, list) and len(данные) > 0:

    # Заголовки

    заголовки = list(данные[0].keys())

    ws.append(заголовки)

    # Форматирование заголовков

    for cell in ws[1]:

    cell.font = Font(bold=True, color="FFFFFF")

    cell.fill = PatternFill(start_color="4472C4",

    end_color="4472C4",

    fill_type="solid")

    # Данные

    for запись in данные:

    ws.append([запись.get(ключ, '') for ключ in заголовки])

    # Сохранение

    wb.save(excel_file)

    print(f"Файл сохранен: {excel_file}")

    # Использование

    json_to_excel('data.json', 'output.xlsx')

    xlsxwriter (Продвинутое форматирование)

    import json
    

    import xlsxwriter

    def json_to_excel_advanced(json_file, excel_file):

    # Загрузка JSON

    with open(json_file, 'r', encoding='utf-8') as f:

    данные = json.load(f)

    # Создание workbook

    workbook = xlsxwriter.Workbook(excel_file)

    worksheet = workbook.add_worksheet('Данные')

    # Форматы

    header_format = workbook.add_format({

    'bold': True,

    'bg_color': '#4472C4',

    'font_color': 'white',

    'border': 1

    })

    cell_format = workbook.add_format({

    'border': 1

    })

    # Заголовки

    заголовки = list(данные[0].keys())

    for col, заголовок in enumerate(заголовки):

    worksheet.write(0, col, заголовок, header_format)

    # Данные

    for row, запись in enumerate(данные, start=1):

    for col, ключ in enumerate(заголовки):

    значение = запись.get(ключ, '')

    worksheet.write(row, col, значение, cell_format)

    # Автофильтр

    worksheet.autofilter(0, 0, len(данные), len(заголовки) - 1)

    # Закрепить заголовки

    worksheet.freeze_panes(1, 0)

    workbook.close()

    print(f"Excel файл создан: {excel_file}")

    # Использование

    json_to_excel_advanced('data.json', 'formatted.xlsx')

    JavaScript/Node.js

    xlsx библиотека

    Установка:
    npm install xlsx
    Базовая конвертация:
    const XLSX = require('xlsx');
    

    const fs = require('fs');

    function jsonToExcel(jsonFile, excelFile) {

    // Чтение JSON

    const данные = JSON.parse(fs.readFileSync(jsonFile, 'utf8'));

    // Создание workbook

    const workbook = XLSX.utils.book_new();

    // Конвертация JSON в worksheet

    const worksheet = XLSX.utils.json_to_sheet(данные);

    // Добавление worksheet в workbook

    XLSX.utils.book_append_sheet(workbook, worksheet, 'Данные');

    // Сохранение файла

    XLSX.writeFile(workbook, excelFile);

    console.log(Файл сохранен: ${excelFile});

    }

    // Использование

    jsonToExcel('data.json', 'output.xlsx');

    С несколькими листами:
    const XLSX = require('xlsx');
    

    const fs = require('fs');

    function jsonToExcelMultiSheet(данные, excelFile) {

    const workbook = XLSX.utils.book_new();

    // Создание нескольких листов

    for (const [название, данныеЛиста] of Object.entries(данные)) {

    const worksheet = XLSX.utils.json_to_sheet(данныеЛиста);

    XLSX.utils.book_append_sheet(workbook, worksheet, название);

    }

    XLSX.writeFile(workbook, excelFile);

    console.log(Создано ${Object.keys(данные).length} листов);

    }

    // Использование

    const данные = {

    'Пользователи': [

    {имя: 'Иван', возраст: 30},

    {имя: 'Мария', возраст: 25}

    ],

    'Продукты': [

    {название: 'Товар A', цена: 1000},

    {название: 'Товар B', цена: 1500}

    ]

    };

    jsonToExcelMultiSheet(данные, 'multi_sheet.xlsx');

    Обработка вложенных JSON

    Плоская структура

    Исходный JSON:
    [
    

    {

    "имя": "Иван",

    "контакты": {

    "email": "ivan@example.com",

    "телефон": "+7-900-123-45-67"

    },

    "адрес": {

    "город": "Москва",

    "улица": "Тверская"

    }

    }

    ]

    Python: Flatten функция:
    import pandas as pd
    

    from pandas import json_normalize

    # Чтение и нормализация

    with open('nested.json', 'r', encoding='utf-8') as f:

    данные = json.load(f)

    # Flatten вложенных объектов

    df = json_normalize(данные)

    # Сохранение в Excel

    df.to_excel('flattened.xlsx', index=False)

    Результат в Excel:
    | имя  | контакты.email     | контакты.телефон    | адрес.город | адрес.улица |
    

    |------|-------------------|---------------------|-------------|-------------|

    | Иван | ivan@example.com | +7-900-123-45-67 | Москва | Тверская |

    Кастомная flatten функция

    def flatten_json(nested_json, separator='_'):
    

    """Рекурсивно делает JSON плоским"""

    out = {}

    def flatten(x, name=''):

    if type(x) is dict:

    for a in x:

    flatten(x[a], name + a + separator)

    elif type(x) is list:

    for i, a in enumerate(x):

    flatten(a, name + str(i) + separator)

    else:

    out[name[:-1]] = x

    flatten(nested_json)

    return out

    # Использование

    данные = [

    {

    "пользователь": {

    "имя": "Иван",

    "возраст": 30

    },

    "навыки": ["Python", "JavaScript"]

    }

    ]

    плоские = [flatten_json(запись) for запись in данные]

    # Конвертация в Excel

    df = pd.DataFrame(плоские)

    df.to_excel('flat_output.xlsx', index=False)

    Обработка массивов

    JSON с массивами

    [
    

    {

    "имя": "Иван",

    "навыки": ["Python", "JavaScript", "Go"]

    },

    {

    "имя": "Мария",

    "навыки": ["Java", "C++"]

    }

    ]

    Опция 1: Объединить в строку:
    import pandas as pd
    

    import json

    with open('data.json', 'r', encoding='utf-8') as f:

    данные = json.load(f)

    # Объединить массивы в строки

    for запись in данных:

    if 'навыки' in запись:

    запись['навыки'] = ', '.join(запись['навыки'])

    df = pd.DataFrame(данные)

    df.to_excel('arrays_as_strings.xlsx', index=False)

    Опция 2: Отдельные строки:
    def развернуть_массивы(данные):
    

    """Создать отдельную строку для каждого элемента массива"""

    результат = []

    for запись in данные:

    if 'навыки' in запись and isinstance(запись['навыки'], list):

    for навык in запись['навыки']:

    новая_запись = запись.copy()

    новая_запись['навыки'] = навык

    результат.append(новая_запись)

    else:

    результат.append(запись)

    return результат

    развернутые = развернуть_массивы(данные)

    df = pd.DataFrame(развернутые)

    df.to_excel('arrays_expanded.xlsx', index=False)

    Работа с большими JSON файлами

    Chunked обработка

    import pandas as pd
    

    import json

    def большой_json_в_excel(json_file, excel_file, chunk_size=1000):

    """Обработка большого JSON файла частями"""

    with open(json_file, 'r', encoding='utf-8') as f:

    данные = json.load(f)

    # Обработка частями

    with pd.ExcelWriter(excel_file, engine='openpyxl') as writer:

    for i in range(0, len(данные), chunk_size):

    chunk = данные[i:i + chunk_size]

    df = pd.DataFrame(chunk)

    # Добавить на один лист

    if i == 0:

    df.to_excel(writer, sheet_name='Данные',

    index=False, startrow=0)

    else:

    df.to_excel(writer, sheet_name='Данные',

    index=False, startrow=i, header=False)

    print(f"Обработано {len(данные)} записей")

    большой_json_в_excel('large_data.json', 'output.xlsx')

    Streaming с ijson

    import ijson
    

    import pandas as pd

    def stream_json_to_excel(json_file, excel_file):

    """Streaming обработка для очень больших файлов"""

    chunk = []

    chunk_size = 1000

    all_chunks = []

    with open(json_file, 'rb') as f:

    parser = ijson.items(f, 'item')

    for item in parser:

    chunk.append(item)

    if len(chunk) >= chunk_size:

    all_chunks.append(pd.DataFrame(chunk))

    chunk = []

    # Последний chunk

    if chunk:

    all_chunks.append(pd.DataFrame(chunk))

    # Объединить и сохранить

    df_final = pd.concat(all_chunks, ignore_index=True)

    df_final.to_excel(excel_file, index=False)

    print(f"Создан Excel с {len(df_final)} строками")

    stream_json_to_excel('very_large.json', 'output.xlsx')

    Форматирование и стилизация

    Условное форматирование

    import pandas as pd
    

    from openpyxl import load_workbook

    from openpyxl.styles import PatternFill

    # Создать Excel

    df = pd.DataFrame([

    {'имя': 'Иван', 'баланс': 15000},

    {'имя': 'Мария', 'баланс': -5000},

    {'имя': 'Петр', 'баланс': 30000}

    ])

    excel_file = 'styled.xlsx'

    df.to_excel(excel_file, index=False)

    # Применить условное форматирование

    wb = load_workbook(excel_file)

    ws = wb.active

    # Красный для отрицательных балансов

    red_fill = PatternFill(start_color="FFC7CE", end_color="FFC7CE", fill_type="solid")

    green_fill = PatternFill(start_color="C6EFCE", end_color="C6EFCE", fill_type="solid")

    for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=2, max_col=2):

    for cell in row:

    if cell.value < 0:

    cell.fill = red_fill

    else:

    cell.fill = green_fill

    wb.save(excel_file)

    print("Применено условное форматирование")

    Графики и диаграммы

    import pandas as pd
    

    from openpyxl import load_workbook

    from openpyxl.chart import BarChart, Reference

    # Создать данные

    df = pd.DataFrame([

    {'месяц': 'Январь', 'продажи': 10000},

    {'месяц': 'Февраль', 'продажи': 12000},

    {'месяц': 'Март', 'продажи': 15000}

    ])

    excel_file = 'with_chart.xlsx'

    df.to_excel(excel_file, index=False)

    # Добавить график

    wb = load_workbook(excel_file)

    ws = wb.active

    chart = BarChart()

    chart.title = "Продажи по месяцам"

    chart.x_axis.title = "Месяц"

    chart.y_axis.title = "Продажи"

    data = Reference(ws, min_col=2, min_row=1, max_row=4)

    cats = Reference(ws, min_col=1, min_row=2, max_row=4)

    chart.add_data(data, titles_from_data=True)

    chart.set_categories(cats)

    ws.add_chart(chart, "D2")

    wb.save(excel_file)

    print("График добавлен в Excel")

    Командная строка

    Скрипт для быстрой конвертации

    convert_json.py:
    #!/usr/bin/env python3
    

    import sys

    import json

    import pandas as pd

    def main():

    if len(sys.argv) < 3:

    print("Использование: python convert_json.py input.json output.xlsx")

    sys.exit(1)

    input_file = sys.argv[1]

    output_file = sys.argv[2]

    try:

    with open(input_file, 'r', encoding='utf-8') as f:

    данные = json.load(f)

    df = pd.DataFrame(данные)

    df.to_excel(output_file, index=False)

    print(f"✓ Конвертация завершена: {output_file}")

    print(f" Строк: {len(df)}")

    print(f" Колонок: {len(df.columns)}")

    except Exception as e:

    print(f"✗ Ошибка: {e}")

    sys.exit(1)

    if __name__ == '__main__':

    main()

    Использование:
    python convert_json.py data.json output.xlsx

    Лучшие практики

    1. Валидация данных

    def валидировать_перед_конвертацией(данные):
    

    """Проверка данных перед конвертацией"""

    if not isinstance(данные, list):

    raise ValueError("JSON должен быть массивом объектов")

    if len(данные) == 0:

    raise ValueError("JSON массив пуст")

    # Проверка согласованности ключей

    первые_ключи = set(данные[0].keys())

    for запись in данные[1:]:

    if set(запись.keys()) != первые_ключи:

    print("Предупреждение: Несогласованные ключи в записях")

    break

    return True

    валидировать_перед_конвертацией(данные)

    2. Обработка ошибок

    def безопасная_конвертация(json_file, excel_file):
    

    """Конвертация с обработкой ошибок"""

    try:

    with open(json_file, 'r', encoding='utf-8') as f:

    данные = json.load(f)

    валидировать_перед_конвертацией(данные)

    df = pd.DataFrame(данные)

    df.to_excel(excel_file, index=False)

    return True, f"Успешно: {excel_file}"

    except FileNotFoundError:

    return False, f"Файл не найден: {json_file}"

    except json.JSONDecodeError as e:

    return False, f"Ошибка парсинга JSON: {e}"

    except Exception as e:

    return False, f"Ошибка конвертации: {e}"

    success, message = безопасная_конвертация('data.json', 'output.xlsx')

    print(message)

    3. Оптимизация производительности

    # Для больших файлов используйте:
    

    # - Chunked обработку

    # - engine='xlsxwriter' (быстрее)

    # - Минимальное форматирование

    df.to_excel(

    'output.xlsx',

    index=False,

    engine='xlsxwriter', # Быстрее чем openpyxl

    # freeze_panes=(1, 0) # Закрепить заголовки

    )

    Заключение

    Конвертация JSON в Excel — распространенная задача с множеством решений. Выбор инструмента зависит от ваших потребностей:

    Для быстрой конвертации:
    • Онлайн-инструменты (ConvertCSV, JSON-CSV)

    Для автоматизации:
    • Python с pandas (рекомендуется)
    • Node.js с xlsx

    Для сложного форматирования:
    • openpyxl (Python)
    • xlsxwriter (Python)

    Для больших файлов:
    • Chunked обработка
    • Streaming с ijson

    С этим руководством вы готовы эффективно конвертировать JSON данные в Excel для любых задач!

    Share:

    Похожие статьи

    Read in English