Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас

CSV у JSON

Перетворити таблицю CSV на масив об'єктів

Дані не залишають ваш браузер

Цей інструмент повністю працює на вашому пристрої: обчислення виконує JavaScript у вкладці. Ми не надсилаємо введений текст на сервер, не зберігаємо і не логуємо його. Можете сміливо працювати з робочими даними - і навіть відключити інтернет після завантаження сторінки.

Результат

Поділитись

Навіщо конвертувати CSV

CSV - формат, у якому дані приходять від бухгалтерії, з експорту CRM, з Google Sheets. Щоб згодувати їх імпортеру, сідеру чи API, зручніше мати масив об'єктів, де колонки стали ключами.

Як це працює тут

Перший рядок за замовчуванням вважається заголовком, і його значення стають ключами. Вимкніть галочку - і кожен рядок перетвориться просто на масив значень.

Парсер розуміє лапки: кома всередині "Петро, Іванович" не розділяє поле. Подвоєні лапки "" всередині значення перетворюються на одну - як вимагає RFC 4180.

Роздільник

Попри назву, CSV далеко не завжди comma-separated. Український Excel зазвичай зберігає з крапкою з комою, бо кома в наших локалях - десятковий роздільник. Якщо результат виглядає як один стовпчик - перемкніть роздільник.

Підводні камені CSV

BOM на початку файлу. Excel часто дописує невидимі байти EF BB BF, і перший ключ стає name замість name. У PHP:

$content = file_get_contents($path);
$content = ltrim($content, "\xEF\xBB\xBF");

Кодування. Український Excel досі любить Windows-1251. Якщо замість літер «кракозябри» - файл треба перекодувати:

$content = mb_convert_encoding($content, 'UTF-8', 'Windows-1251');

Переноси рядків усередині поля. Значення в лапках може містити \n. Цей інструмент такі поля не підтримує - для них потрібен повноцінний парсер на сервері.

У PHP і Laravel

// Потокове читання: файл не піднімається в пам'ять цілком
$handle = fopen($path, 'r');
$header = fgetcsv($handle, separator: ';');

while (($row = fgetcsv($handle, separator: ';')) !== false) {
    $data = array_combine($header, $row);
    // ...
}

fclose($handle);
// Імпорт великого файлу: чанками, а не по одному рядку
collect($rows)
    ->chunk(500)
    ->each(fn ($chunk) => City::insert($chunk->all()));

Для складних імпортів у Laravel зазвичай беруть league/csv - він коректно обробляє і переноси в полях, і кодування, і потоки.