Работает на вашем устройстве · Ваш файл никогда не покидает устройство.
Перетащите файл .json или вставьте JSON прямо из ответа API — и получите CSV, который откроется в Excel, Google Таблицах или любом окне импорта. Список верхнего уровня даёт по строке на элемент; иначе берётся самый длинный список записей в документе, так что {"results": [...], "count": 2} даёт по строке на каждый результат; объект, в котором нет списка, становится одной строкой.
Правила фиксированы, поэтому результат предсказуем: вложенные объекты становятся столбцами через точку (address.city), список простых значений записывается в одну ячейку через точку с запятой, а список объектов внутри записи получает нумерованные столбцы (items.0.name). Строка заголовков — объединение всех найденных ключей в порядке первого появления, так что записи с пропущенными полями просто оставляют ячейку пустой.
CSV записывается по RFC 4180 — поля с запятыми, кавычками и переносами строк корректно берутся в кавычки — в UTF-8 с необязательной меткой BOM, чтобы Excel правильно показывал кириллицу, любую другую письменность и символы. Перед ячейкой, которая начинается с =, +, - или @, ставится апостроф, чтобы табличная программа показала её как текст, а не выполнила как формулу. Первые 200 строк видны до скачивания, и ничего не покидает ваше устройство.
Не подходит для: Глубоко вложенного одиночного объекта без списка внутри — он преобразуется, но в одну очень широкую строку, а не в таблицу.
Если на верхнем уровне список, он и даёт строки. Иначе инструмент просматривает документ на глубину до восьми уровней и ищет самый длинный список объектов. Поэтому и {"response": {"data": {"items": [...]}}}, и {"results": [...], "count": 2, "next": null} дают по строке на элемент, а строка под результатом называет использованный список, например results. Значения рядом с этим списком, вроде count и next, не относятся ни к одной записи и пропускаются.
Из двух одинаково длинных списков побеждает тот, что ближе к верху. Чтобы взять более короткий список, скопируйте его от [ до ] и вставьте только его. Документ без списка объектов становится одной строкой, а обёртки с единственным ключом пропускаются, так что {"order": {"id": 7, "total": 12}} даёт столбцы id и total.
Текст копируется в точности, включая даты, которые остаются в том виде, в каком они записаны в JSON, например 2024-01-05T10:00:00Z. true и false записываются словами. null, пустой список и пустой объект становятся пустой ячейкой, так что в CSV они выглядят так же, как отсутствующее поле.
Число записывается ровно так, как в JSON: 1.0 остаётся 1.0, 1e21 остаётся 1e21, а идентификатор вроде 12345678901234567890 сохраняет все цифры, даже если он не в кавычках. Обычная программа чтения JSON превратила бы такой идентификатор в 12345678901234567000.
Список списков раскрывается на один уровень: "m": [[1, 2], [3]] даёт столбец m.0 со значением 1;2 и столбец m.1 со значением 3. В списке, где смешаны объекты и простые значения, нумеруется каждый элемент, так что "x": [{"z": 1}, 2] даёт x.0.z и x.1.
Имена столбцов получаются соединением ключей через точку, поэтому ключ, в котором точка уже есть, может совпасть с вложенным: {"a.b": 1, "a": {"b": 2}} дал бы a.b дважды. Второй получает суффикс, так что столбцы называются a.b и a.b_2, и оба значения сохраняются.
Запятая — обычный выбор. Точка с запятой подходит для табличной программы, настроенной на язык с десятичной запятой (например, на русский): там файл с запятыми часто открывается одним столбцом. Табуляция и вертикальная черта — для систем, которые требуют именно их. Каким бы ни был разделитель, файл получает расширение .csv.
Ячейку, которая начинается с =, +, - или @, табличная программа считает формулой и выполнила бы её при открытии. Перед такой ячейкой ставится апостроф — знак, которым сами таблицы помечают «это текст», так что =1+1 записывается как '=1+1. Обычные числа вроде -5 или +3.5 остаются как есть.
Ещё в разделе Таблицы и данные
Эта страница на других языках: English · العربية · Deutsch · Français · Español · Português · 中文 · हिन्दी · Türkçe · עברית · فارسی · اردو · Bahasa Indonesia · বাংলা