JSON в Markdown

Бесплатный онлайн-инструмент конвертации JSON в Markdown. Преобразуйте массивы JSON или вложенные объекты в один клик в код таблиц GFM Markdown, готовый для GitHub README, технической документации и блогов. 4 режима обработки вложенности, настраиваемая глубина flatten (1-6), пользовательский разделитель, украшение ключей (user_name → User Name), сортировка столбцов, интеллектуальное разделение таблиц, умные плейсхолдеры null, выравнивание, предпросмотр 9 опций в реальном времени. Полностью локально в браузере.

Похожие

О конвертации JSON в Markdown и таблицах Markdown

Инструмент JSON в Markdown автоматически преобразует структуры данных JSON в стандартный код таблиц GFM. Он освобождает разработчиков от ручного написания разделителей `|` / `-` и особенно полезен для быстрого отображения вложенных данных API, конфигурационных файлов в виде технической документации, README и блогов.

Таблицы Markdown — это текстовое представление таблиц, предложенное Джоном Грубером в 2004 году: `|` разделяет ячейки, `-` определяет строку-разделитель заголовка, опциональный `:` управляет выравниванием. GFM расширяет стандартный Markdown и нативно поддерживается GitHub, GitLab, Notion, Confluence, Slack, Discord, VS Code. Код, генерируемый этим инструментом, строго соответствует GFM.

Инструменты JSON в Markdown делятся на три категории: 1) только генерация строки Markdown (jsonformatter.org, convertcsv.com); 2) расширенная настройка (глубокий flatten, украшение ключей, разделение таблиц) — представляет данный инструмент; 3) обратный парсинг Markdown (Markdown → JSON).

«Вложенный flatten + украшение ключей» — ключевое отличие от конкурентов: традиционные инструменты показывают `{user:{name:'Alice'}}` как строку `{"name":"Alice"}`, а этот инструмент рекурсивно разворачивает в столбец `user.name` (до 6 уровней) и преобразует `user_name`/`userProfileId` в `User Name`/`User Profile Id`.

«Интеллектуальное разделение таблиц» — ещё одно отличие: при наличии нескольких массивов верхнего уровня (`{users:[...], orders:[...]}`) инструмент автоматически создаёт отдельные таблицы с заголовками `### ИмяПоля` (H3).

Главное преимущество Markdown перед HTML — «чистый текст для контроля версий»: git diff чётко показывает изменения строк таблицы в .md, в отличие от HTML `<tr>` `<td>`. Поэтому GitHub и GitLab используют Markdown-таблицы по умолчанию.

Варианты использования

  • Преобразование JSON-данных API в таблицы Markdown для технической документации
  • Отображение конфигураций, параметров и примеров ответов API в GitHub README
  • Представление результатов анализа данных в таблицах Markdown (экспорт в Notion/Confluence)
  • Чёткое отображение структуры данных API в документации (Swagger/Redoc/OpenAPI)
  • Разделы документации для генераторов статических сайтов (VuePress/Docusaurus/Hexo)
  • Обмен структурированными данными в Slack/Discord/корпоративных мессенджерах
  • Предпросмотр таблиц в VS Code/JetBrains IDE Markdown Preview
  • Контроль версий: таблицы Markdown — чистый текст, удобный для git diff и Code Review
  • Образование: преобразование студенческих JSON-заданий в единые таблицы для проверки
  • Шаблоны писем (почтовые клиенты с поддержкой Markdown: Bear Mail, HEY)
  • Импорт в базу данных Notion: генерация таблицы Markdown → вставка в Notion
  • Интернационализация: общая структура для китайских и английских документов после flatten + Beautify keys

Как использовать

  1. Вставьте массив JSON (рекомендуется) или вложенный объект в левый редактор, или нажмите «Sample» для загрузки примера, или «Upload» для загрузки файла .json/.txt
  2. Выберите режим обработки вложенности на панели (рекомендуется «Flatten»), при глубокой вложенности увеличьте Max Depth
  3. При необходимости укажите пользовательский разделитель в поле Separator (по умолчанию `.`, можно `_` / `-` / `/`)
  4. Выберите Strategy: «Single» для простого массива, «Multi» для авторазделения, «Split» для принудительного разделения
  5. Настройте опции: Sort columns, Beautify keys, Exclude empty, Include Caption, Include Index
  6. Выберите выравнивание: влево/по центру/вправо
  7. Нажмите «Convert» (или Enter) для запуска преобразования (защита от дребезга 500 мс)
  8. Просмотрите результат справа, затем нажмите «Copy» для копирования или «Download» для сохранения как table.md

Функции

  • Автоматический flatten вложенных объектов: рекурсивное разворачивание `{user:{name,age}}` в `user.name`, `user.age` с точечной нотацией (глубина 1-6), без ручного написания скриптов
  • 4 режима обработки вложенности: Flatten (рекомендуется, настраиваемая глубина) / First Key / Stringify / Raw JSON
  • Интеллектуальное разделение таблиц: распознавание массивов верхнего уровня (`users`, `orders`), автоматическое разделение на независимые таблицы Markdown с заголовками ###
  • Пользовательский разделитель: по умолчанию `.` (соответствует Lodash/MongoDB), можно заменить на `_` / `-` / `/`
  • Украшение ключей (camelCase/snake_case → Title Case): `user_name` → `User Name`, `userProfileId` → `User Profile Id`
  • Сортировка столбцов: сортировка всех заголовков по алфавиту одним кликом для стабильного порядка при сравнении документов
  • Исключение пустых столбцов: автоматическое обнаружение и исключение столбцов, где все строки null/undefined/пустые
  • 3 режима выравнивания: влево/по центру/вправо в соответствии со спецификацией GFM
  • Столбец индекса строк: опциональный столбец `#` слева (настраиваемый заголовок)
  • Заголовок Caption: автоматическая генерация `### Имя данных` (H3) над каждой таблицей
  • Типобезопасное экранирование: `|` / `\` / переводы строк автоматически экранируются в `\|` / `\\` / `<br>`
  • Статистика генерации: отображение «Сгенерировано N таблиц × M строк × K столбцов» + размер в байтах
  • Примеры данных + загрузка файлов: 3 встроенных примера, drag-and-drop или загрузка .json/.txt
  • Полностью локальная обработка: весь парсинг, flatten, генерация и операции копирования/скачивания выполняются в браузере, данные не загружаются на сервер

Примеры кода

JavaScript: fetch + flatten + вывод Markdown

javascript

Наиболее частый сценарий: вызов GitHub API, flatten вложенных объектов в точечную нотацию, генерация таблицы Markdown.

// 1) Вызов GitHub API для получения списка пользователей
async function fetchUsers() {
  const res = await fetch('https://api.github.com/users?per_page=10');
  return await res.json();
}

// 2) Функция flatten вложенных объектов
function flattenObject(obj, prefix = '', sep = '.', result = {}, depth = 0, maxDepth = 3) {
  if (!obj || typeof obj !== 'object' || Array.isArray(obj)) return result;
  if (depth >= maxDepth) {
    if (prefix) result[prefix] = JSON.stringify(obj);
    return result;
  }
  for (const [k, v] of Object.entries(obj)) {
    const key = prefix ? `${prefix}${sep}${k}` : k;
    if (v && typeof v === 'object' && !Array.isArray(v)) {
      flattenObject(v, key, sep, result, depth + 1, maxDepth);
    } else {
      result[key] = v;
    }
  }
  return result;
}

// 3) Преобразование плоских данных в таблицу Markdown
function generateMarkdownTable(rows, opts = {}) {
  const { align = 'left', includeIndex = false, sortColumns = false } = opts;
  const flat = rows.map(r => flattenObject(r));
  let cols = [...new Set(flat.flatMap(r => Object.keys(r)))];
  if (sortColumns) cols.sort((a, b) => a.localeCompare(b));

  const alignMap = { left: ':-', center: ':-:', right: '-:' };
  const alignSep = alignMap[align];

  const headers = includeIndex ? ['#', ...cols] : cols;
  const seps = includeIndex ? [alignSep, ...cols.map(() => alignSep)] : cols.map(() => alignSep);

  const escapeCell = v =>
    v == null ? '' :
    typeof v === 'object' ? JSON.stringify(v).slice(0, 60) :
    String(v).replace(/\\|/g, '\\|').replace(/\n/g, '<br>');

  const lines = [];
  lines.push('| ' + headers.join(' | ') + ' |');
  lines.push('| ' + seps.join(' | ') + ' |');
  flat.forEach((r, i) => {
    const idxCell = includeIndex ? [i + 1] : [];
    const cells = cols.map(c => escapeCell(r[c]));
    lines.push('| ' + [...idxCell, ...cells].join(' | ') + ' |');
  });
  return lines.join('\n');
}

// 4) Вывод в README.md
const users = await fetchUsers();
const md = generateMarkdownTable(... [truncated]

Python: генерация отчёта Markdown на бэкенде Flask

python

Агрегация данных из нескольких источников на бэкенде, генерация таблицы Markdown на Python (без фронтенда), подходит для CI/CD автогенерации еженедельных отчётов.

from flask import Flask, jsonify
import json

app = Flask(__name__)

def flatten(obj, prefix='', sep='.', result=None, depth=0, max_depth=3):
    """Рекурсивный flatten вложенных объектов"""
    if result is None:
        result = {}
    if not isinstance(obj, dict) or depth >= max_depth:
        if prefix:
            result[prefix] = json.dumps(obj) if isinstance(obj, (dict, list)) else obj
        return result
    for k, v in obj.items():
        key = f"{prefix}{sep}{k}" if prefix else k
        if isinstance(v, dict):
            flatten(v, key, sep, result, depth + 1, max_depth)
        else:
            result[key] = v
    return result

def json_to_markdown_table(data, align='left', include_index=False,
                            sort_columns=False, caption=None):
    if isinstance(data, dict):
        data = [data]
    if not data:
        return "<!-- No valid objects found -->"

    flat_rows = [flatten(row) for row in data]
    columns = []
    for row in flat_rows:
        for k in row:
            if k not in columns:
                columns.append(k)
    if sort_columns:
        columns.sort()

    align_sep = {'left': ':-', 'center': ':-:', 'right': '-:'}[align]
    headers = (['#'] if include_index else []) + columns
    seps = ([align_sep] if include_index else []) + [align_sep] * len(columns)

    def escape_cell(v):
        if v is None:
            return ''
        if isinstance(v, (dict, list)):
            s = json.dumps(v)
            return s[:60] + '…' if len(s) > 60 else s
        return str(v).replace('|', '\\|').replace('\n', '<br>')

    lines = []
    if caption:
        lines.append(f'### {caption}\n')
    lines.append('| ' + ' | '.join(headers) + ' |')
    lines.append('| ' + ' | '.join(seps) + ' |')
    for i, row in enumerate(flat_rows):
        idx_cell = [str(i + 1)] if include_index else []
        cells = [escape_cell(row.get(c, '')) for c in columns]
        lines.appe... [truncated]

Командная строка: jq + инструмент для генерации GitHub Release Notes

bash

Сценарий эксплуатации: получение списка PR из GitHub API, агрегация через jq с flatten в точечную нотацию, вставка в инструмент для генерации GFM Release Notes.

# 1) Получение последних 50 merged PR через gh CLI
PR_JSON=$(gh pr list --state merged --limit 50 --json number,title,author,labels,mergedAt)

# 2) Flatten вложенного массива labels через jq
echo "$PR_JSON" | jq 'map({
  number: .number,
  title: .title,
  author: .author.login,
  labels: (.labels | map(.name) | join(", ")),
  mergedAt: .mergedAt
})' > release_prs.json

# 3) Откройте инструмент (https://geekformat.com/json/to-markdown/)
#    - Вставьте содержимое release_prs.json
#    - Strategy: "Single"
#    - Включите Sort columns + Include Index
#    - Нажмите Convert, скопируйте таблицу

# 4) Вставка в Release Notes
cat > RELEASE.md <<'EOF'
# v2.1.0 Release Notes

## 🆕 What's Changed

EOF

sed -i '/## 🆕/r /tmp/table.md' RELEASE.md

cat >> RELEASE.md <<'EOF'

**Full Changelog**: https://github.com/your/repo/compare/v2.0.0...v2.1.0
EOF

# 5) Создание Release через gh CLI
gh release create v2.1.0 -F RELEASE.md -t "v2.1.0"

Часто задаваемые вопросы

Как преобразовать данные JSON в таблицу Markdown?

Вставьте массив JSON (каждый элемент — объект) или одиночный объект в левое поле ввода, нажмите кнопку «Convert» на панели инструментов — справа автоматически сгенерируется код таблицы Markdown стандарта GFM. Код можно сразу вставить в GitHub README, блог на Markdown, страницу Confluence или документ Notion.

Можно ли преобразовать вложенные объекты JSON в таблицу Markdown?

Да. Инструмент имеет 4 встроенных режима обработки вложенности: ① Flatten (рекомендуется): рекурсивно разворачивает `{user:{name:'Alice',age:30}}` в столбцы `user.name`, `user.age`, глубина 1-6; ② First Key: только поля верхнего уровня, вложенные объекты как JSON-строка; ③ Stringify: все вложенные объекты как JSON-строка; ④ Raw JSON: каждая строка как полный JSON-блок.

Можно ли изменить разделитель ключей после flatten?

По умолчанию используется `.` (соответствует JavaScript/MongoDB/Lodash). Для `user_name` или `user/name` измените разделитель в поле «Separator» (до 3 символов).

Что такое украшение ключей (Beautify keys)?

При включении опции `user_name`, `userProfileId` автоматически преобразуются в `User Name`, `User Profile Id` (Title Case). Это делает заголовки более читаемыми для людей, особенно в README и API-документации.

Как разделить данные на несколько таблиц?

Выпадающий список «Strategy»: Single (по умолчанию) — одна таблица; Multi — автоматическое разделение массивов с заголовками ###; Split — принудительное разделение, только поля-массивы.

Можно ли использовать сгенерированную таблицу Markdown напрямую в GitHub?

Да. Таблицы соответствуют CommonMark и GFM, работают в GitHub README, GitLab, Notion, VuePress/Docusaurus/Hexo, Slack/Discord, VS Code Markdown Preview.

Поддерживается ли пакетная генерация нескольких таблиц?

Да. Переключите Strategy на «Multi» или «Split» — инструмент распознает массивы верхнего уровня и создаст отдельную таблицу для каждого с заголовком `### ИмяПоля`.

Как управлять порядком заголовков?

По умолчанию используется порядок первого появления ключей. Для алфавитной сортировки включите «Sort columns». Для полного кастомного порядка используйте функцию «Column order» (скоро).

Что делать, если слишком много пустых столбцов?

Включите «Exclude empty» — инструмент автоматически исключит столбцы, где все строки null/undefined/пустые. Особенно полезно для разреженных данных.

Не сломает ли символ | внутри ячейки таблицу?

Нет. Инструмент автоматически экранирует `|` → `\|`, `\` → `\\`, переносы строк → `<br>`. Это ключевое преимущество перед конкурентами.

В чём разница между таблицей Markdown и таблицей HTML?

Markdown — чистый текст (`|` `-`), удобен для документации, README, контроля версий; HTML (`<table>`) — для стилизации CSS и адаптивной вёрстки. Для техдокументации используйте этот инструмент, для веб-страниц — JSON в HTML.

Какое максимальное количество строк в таблице Markdown?

Верхнего предела нет (в отличие от HTML-инструмента). Рекомендации: >1000 строк — разделите на несколько таблиц; в GitHub README файл не должен превышать 1MB; соблюдайте ограничения Notion/Confluence.

Как настроить заголовок Caption?

В режимах Multi/Split Caption автоматически берётся из имени массива верхнего уровня. В режиме Single включите «Include Caption» и введите свой текст.

Загружаются ли данные на сервер? Безопасна ли конфиденциальность?

Полностью локально в браузере. Весь парсинг, flatten, генерация выполняются через JavaScript, файлы читаются только локальным FileReader. Данные не отправляются на сервер. Закрытие страницы удаляет все данные.

Устранение неполадок

Ошибка «Введите данные JSON»

Левое поле ввода пустое. Убедитесь, что вставлен корректный JSON, или нажмите «Sample»/«Upload».

Ошибка «Unexpected token ... in JSON at position N»

Невалидный JSON. Причины: лишняя запятая в конце, одинарные кавычки вместо двойных, синтаксис JS-объекта. Исправьте через JSON Formatter.

Таблица содержит только заголовок без строк данных

JSON — пустой массив [] или объект {}. Инструмент возвращает комментарий «<!-- No valid objects found -->». Добавьте хотя бы один объект.

Слишком длинные имена столбцов при flatten

Уменьшите Max Depth (с 6 до 3-4), переключитесь на «First Key» или упростите структуру исходного JSON.

Режим Multi не создаёт несколько таблиц

Проверьте, что исходный JSON — объект с полями-массивами. Если все поля — строки/числа/объекты, стратегия Multi откатывается к Single.

После Beautify keys заголовки пустые

Функция не изменяет ключи, начинающиеся с заглавных букв или спецсимволов (__proto__, constructor). Переименуйте их в исходном JSON.

Таблица пустая при рендеринге на GitHub

Причины: неэкранированный | в ячейке, HTML-теги, кодировка не UTF-8. Инструмент экранирует автоматически, но проверьте после ручных правок.

Скачанный table.md пуст в редакторе

Файл содержит только код таблицы (начинается с |), без заголовков документа. Добавьте # Заголовок вручную или вставьте в существующий .md.

Иероглифы в заголовках отображаются некорректно

Проверьте кодировку исходного JSON — должен быть UTF-8. Данные из Excel могут быть в GBK, конвертируйте перед вставкой.

Нужно массово изменить сгенерированные таблицы

Скопируйте Markdown и используйте sed/скрипт для замены. Для цветов и стилей используйте JSON в HTML.

После Exclude Empty таблица стала шире

Исключаются только столбцы, где ВСЕ строки пусты. Если хотя бы одна строка имеет значение — столбец остаётся.

История ввода потеряна

История хранится в localStorage браузера и теряется при очистке данных, смене режима инкогнито или браузера. Синхронизация между устройствами не поддерживается.

Глоссарий

Таблица Markdown
Текстовая таблица из символов | и -, определённая спецификацией GFM. Код инструмента строго соответствует этому синтаксису и напрямую рендерится в GitHub/GitLab/Notion/Confluence.
GFM
GitHub Flavored Markdown — расширение GitHub поверх стандартного Markdown, включающее таблицы, зачёркивание, списки задач, автоссылки.
CommonMark
Стандартизированная спецификация Markdown (2014). Синтаксис таблиц GFM расширяет CommonMark. Вывод инструмента корректно рендерится обоими парсерами.
Массив JSON
Набор объектов в квадратных скобках [...]. Каждый объект становится строкой таблицы. Пустой массив не генерирует таблицу.
Объект JSON
Набор пар ключ-значение в фигурных скобках {}. Ключи становятся заголовками, значения — ячейками. Одиночный объект автоматически оборачивается в однострочную таблицу.
Вложенный flatten
Рекурсивное разворачивание вложенных объектов в плоские ключи с точками: {user:{name:'A'}} → 'user.name'. Поддерживается глубина 1-6, разделитель настраивается.
Украшение ключей (Beautify Keys)
Преобразование snake_case/camelCase в Title Case: user_name → User Name, userProfileId → User Profile Id.
Интеллектуальное разделение таблиц (Multi-Table Split)
Распознавание массивов верхнего уровня (users, orders) и автоматическое создание отдельных таблиц с заголовками ###.
Синтаксис выравнивания (Alignment)
Строка-разделитель GFM поддерживает управление через :: : - влево, :-: по центру, -: вправо. Инструмент предоставляет три кнопки.
Столбец индекса строк (Index Column)
Нумерованный столбец # слева таблицы (начиная с 1), заголовок настраивается.
Caption
Заголовок H3 (###) в Markdown, автоматически добавляемый над каждой таблицей (имя массива или пользовательский текст).
Сортировка столбцов (Sort Columns)
Алфавитная сортировка всех столбцов для стабильного порядка при сравнении документов.
Исключение пустых столбцов (Exclude Empty)
Автоматическое исключение столбцов, где все строки null/undefined/пустые. Значительно сокращает ширину таблиц с разреженными данными.
Экранирование Markdown (Escape)
Преобразование специальных символов (|, \, перевод строки) в безопасную форму (\|, \\, <br>). Ключевое преимущество перед конкурентами.
Локальная история (localStorage)
Локальное хранилище браузера (~5-10MB). Инструмент сохраняет последний ввод для восстановления после обновления или закрытия страницы.
Защита от дребезга (Debounce)
Техника оптимизации: объединение высокочастотных событий ввода в одно выполнение. Установлена задержка 500 мс для предотвращения лагов.

Сравнение 4 режимов обработки вложенных объектов

Панель инструментов предлагает 4 режима для разных сценариев вложенности:

РежимПоведениеПримерСценарий
FlattenРекурсивное разворачивание с точечной нотацией (глубина 1-6)user.name / profile.roleРеальные API GitHub/Stripe/Notion; каждый атрибут в отдельный столбец
First KeyТолько ключи первого уровня, вложенные объекты как строка JSONuser / tagsНефиксированная или глубокая (>6) вложенность; нужен обзор верхнего уровня
StringifyВсе значения как строки, вложенные объекты через JSON.stringify с экранированиемuser (как полный JSON)Отладка: сохранение исходной структуры JSON для визуального контроля
Raw JSONВся строка в одном столбце value как форматированный JSON-блокvalue (полный JSON)Сниппеты кода, агрегация логов, сохранение исходной формы JSON

Сравнение 3 стратегий генерации таблиц

Выпадающий список Strategy управляет обработкой JSON с несколькими полями-массивами:

СтратегияВходные данныеВыводКогда использовать
SingleМассив JSON или одиночный объект1 таблица, без заголовка H3Простые массивы (наиболее частый случай)
MultiОбъект с несколькими массивами ({users:[...], orders:[...]})Каждый массив → 1 таблица + заголовок ###Агрегация бизнес-объектов (данные dashboard)
SplitЛюбой объектПринудительное извлечение всех массивов верхнего уровняНужны только массивы

14 настраиваемых параметров панели инструментов

Все 14 настраиваемых параметров и их назначение для быстрого выбора комбинации:

ПараметрТипНазначение
nestModeselectОбработка вложенности: Flatten/First Key/Stringify/Raw JSON
maxDepthselectМаксимальная глубина flatten (1-6)
separatortextРазделитель ключей при flatten (по умолчанию ., до 3 символов)
strategyselectСтратегия: Single/Multi/Split
alignbuttonВыравнивание: влево/по центру/вправо
includeIndexcheckboxДобавить столбец # слева
indexHeadertextТекст заголовка столбца индекса (по умолчанию #)
sortColumnscheckboxСортировка всех столбцов по алфавиту
beautifyKeyscheckboxsnake/camelCase → Title Case
excludeEmptycheckboxИсключить столбцы, где все строки пусты
includeCaptioncheckboxДобавить заголовок ### над каждой таблицей
captiontextПользовательский текст Caption (для стратегии Single)
indentselectОтступ для режима Raw JSON (0/2/4)

Правила экранирования ячеек Markdown

Инструмент автоматически экранирует специальные символы в ячейках:

СимволРезультатПричина
| (вертикальная черта)\|Разделитель столбцов Markdown
\ (обратный слеш)\\Символ экранирования Markdown
\n (перевод строки)<br>В ячейках таблиц Markdown перевод строки запрещён
\r (возврат каретки)(удаляется)Остаток Windows-перевода строки
null/undefined(пустая строка)Плейсхолдер по умолчанию, можно настроить Exclude empty
Объект (>60 символов)JSON обрезается до 60 символов + …Предотвращение разрыва таблицы длинной ячейкой

Privacy & Security

Все операции парсинга JSON, flatten вложенности, генерации Markdown, копирования и скачивания выполняются полностью локально в браузере через JavaScript. Входные данные JSON и сгенерированный код Markdown не загружаются на сервер, не записываются, не кэшируются и не сохраняются в облаке. Конфиденциальные JSON с непубличными API и внутренними бизнес-полями можно использовать безопасно — закрытие страницы удаляет все данные.

Authoritative References