Перейти к содержимому
PulsarKit

CSV, Excel или JSON: замер на одной таблице в 10 000 строк

Мы прогнали одну таблицу в 10 000 строк через CSV, Excel и JSON шестью конвертерами. Вот размеры файлов, размеры в ZIP, время и все ячейки, изменившиеся после обратной конвертации.

Автор: PulsarKit ·

Коротко

Для плоской таблицы самым маленьким текстовым файлом оказался CSV: 1,2 МБ на наши 10 000 строк. Те же строки заняли 2,7 МБ в JSON с отступами и 2 МБ в NDJSON. В ZIP CSV и JSON оказались близки: 357 КБ против 398–424 КБ.

Куда больше различий проявилось на обратном пути. Конвертация туда и обратно через Excel или через JSON с настройками по умолчанию изменила 10 960 ячеек из 100 000, причем не одни и те же. Одна настройка сделала путь через Excel точным. Вложенные поля сохранил только JSON: пройдя через CSV или таблицу, они так и не вернулись. Поэтому выбирайте формат по тому, что будет читать файл дальше.

Как мы измеряли

21 октября 2026 года мы собрали скриптом тестовую таблицу: 10 000 строк и 10 столбцов выдуманных данных. В ней есть идентификаторы с ведущими нулями вроде 000001, 13-значные штрихкоды и 19-значные номера счетов. Есть и даты ISO, и суммы с двумя десятичными знаками, примерно половина из них отрицательные. В именах смешаны латиница, буквы с диакритикой и кириллица, а в каждой сотой строке есть эмодзи. Одна заметка из ста содержит запятую, кавычки и перевод строки. Столбец купона пуст в 3 096 строках, и каждый номер телефона начинается со знака плюс.

Мы прогнали ее через шесть конвертеров на pulsarkit.com: «CSV в Excel», «Excel в CSV», «CSV в JSON», «JSON в CSV», «Excel в JSON» и «JSON в Excel». Работали в Chrome 155 на MacBook 2023 года. Все шесть работают прямо во вкладке браузера, а настройки оставались по умолчанию, если мы не называем их отдельно. Время отсчитывалось от нажатия кнопки до появления кнопки «Скачать». Затем наш собственный скрипт сравнил каждую вернувшуюся ячейку с исходной, а типы ячеек мы прочитали внутри каждой книги. Размеры в ZIP получены обычным ZIP-архивом, Deflate с уровнем 6.

Размер, размер в ZIP и скорость

CSV записывает названия столбцов один раз, в первой строке. JSON повторяет их в каждой записи. С отступом по умолчанию в два пробела «CSV в JSON» превратил таблицу в 2,7 МБ — в 2,3 раза больше CSV. NDJSON, по одной компактной записи на строку, занял 2 МБ. «Форматер JSON» в режиме «Минифицировать» превратил файл с отступами в те же 2 МБ — на 23,6 процента меньше.

ZIP убирает большую часть этой разницы, потому что повторяющиеся ключи сжатие обрабатывает лучше всего. В ZIP CSV занял 357 КБ, NDJSON — 398 КБ, а JSON с отступами — 424 КБ.

Файл XLSX — это уже ZIP, поэтому его вес зависит от программы, которая его записывает. Лист из «CSV в Excel», заново сохраненный в LibreOffice Calc, занял 753 КБ. Если важен только размер, отправляйте CSV в ZIP.

По скорости форматы не разошлись. Мы засекли 60 прогонов, и медианная конвертация 10 000 строк заняла около трети секунды. В 49 случаях конвертация заняла меньше полусекунды. Самый медленный, первый «Excel в CSV» за нашу сессию, занял 2 секунды.

Что изменил путь туда и обратно

Через Excel: «CSV в Excel», затем «Excel в CSV». Ведущие нули, 19-значные номера счетов, штрихкоды, переводы строк внутри заметок, эмодзи и пустые ячейки вернулись такими, какими были. Изменились два столбца. Каждое true и false вернулось как TRUE и FALSE, потому что книга хранит их как логические значения. А 960 сумм потеряли конечный ноль, и 612.40 стало 612.4: книга хранит число, а не то, как оно было записано.

Через JSON: «CSV в JSON», затем «JSON в CSV». Те же 960 сумм потеряли конечный ноль по той же причине. Каждый номер телефона вернулся с апострофом впереди, как '+1 202 555 0117. «JSON в CSV» добавляет его к любому значению, которое начинается с +, =, - или @ и не является обычным числом. Так таблица не сможет выполнить его как формулу. Пустые ячейки стали в JSON пустыми строками, а «Excel в JSON» записал для тех же 3 096 ячеек null. Какой JSON вы получите, зависит от пути, если только в «CSV в JSON» не выбрать для поля «Пустые ячейки становятся» вариант null.

В браузере с поясом UTC или UTC+4 каждая дата прошла через «CSV в Excel» без изменений. «CSV в Excel» записывает каждую дату как полночь по UTC, поэтому в браузере с нью-йоркским временем она тоже не сдвигается.

Одна настройка убрала все изменения на пути через Excel: «Типы ячеек» со значением «Все как текст» в «CSV в Excel». И с нью-йоркским временем, и в UTC+4 обратный путь тогда вернул все 100 000 ячеек ровно такими, как они были записаны. Цена — лист из текстовых ячеек, включая суммы. Текст подходит и штрихкодам. С настройками по умолчанию наши 13-значные коды стали числами в формате «Общий». В документации Microsoft сказано, что формат «Общий» показывает числа из 12 и более цифр в экспоненциальном виде.

Вложенные данные не возвращаются

Настоящий JSON редко бывает плоским, поэтому мы добавили в каждую запись объект address и список тегов — 3,8 МБ с отступами. «JSON в CSV» разложил адрес по столбцам address.city и address.zip, а теги склеил в одну ячейку, например new, wholesale. «JSON в Excel» сделал то же самое.

После обратной конвертации в JSON ни один из файлов не вернул прежнюю форму. В обоих случаях получились плоские ключи вроде address.city, а поле tags стало строкой вместо списка. Путь через CSV к тому же изменил типы: 6 017 из 10 000 почтовых индексов — те, что без ведущего нуля, например 78701, — вернулись числами, а 02134 остался текстом. На этом пути пустые купоны, null в нашем файле, вернулись пустыми строками. Путь через Excel сохранил все индексы текстом, а каждый null — как null.

Какой формат выбрать

Если данные будет сортировать, фильтровать и складывать человек, берите XLSX. Он хранит суммы как числа, даты как даты, а true и false как логические значения. Если файл читает программа, берите JSON. Он сохраняет числа, true, false и null и единственный из трех хранит вложенные поля. NDJSON весит столько же, сколько минифицированный JSON, и кладет по одной записи на строку.

Если файл только переходит из одной системы в другую, CSV в ZIP — самый маленький из трех. Разделители, кодировки и метка порядка байтов все же могут подвести CSV на пути в Excel. О них — наше руководство «Как гонять CSV в Excel и обратно, не ломая данные».

Инструменты из этой статьи

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