CSV do JSON: dlaczego płaska tabela nie staje się hierarchią sama z siebie
Konwersja pliku CSV do JSON wydaje się prosta: wczytujesz tabelę, zapisujesz jako tablicę obiektów. W praktyce różnica między tymi formatami ujawnia się w szczegółach, które decydują o tym, czy dane nadają się do dalszego przetworzenia, czy trzeba je ręcznie poprawiać. Strona ta rozwiązuje konkretne problemy związane z brakiem typów w CSV, płaską strukturą tabeli i nieprzewidywalnymi separatorami. Poniżej znajdziesz opis mechanizmów, ograniczeń i typowych pułapek, które decydują o jakości wyniku.
Co odróżnia tę konwersję od innych
Brak typów w źródle, typy w docelu? Niekoniecznie
CSV przechowuje wszystko jako ciągi znaków. Cena produktu (1499.99), kod pocztowy (00-123) czy współrzędne geograficzne (52.2297,21.0122) – każde z tych pól trafia do JSON jako string. Jeśli oczekujesz, że JSON automatycznie rozpozna liczby, wartości logiczne lub null, musisz samodzielnie skonwertować te wartości po pobraniu pliku. Narzędzie nie próbuje odgadnąć typu, ponieważ CSV nie zawiera metadanych o rodzaju danych.
Brak zagnieżdżania
CSV to ściśle płaska tabela: każdy wiersz ma tę samą liczbę kolumn, a każda komórka zawiera pojedynczą wartość. W wyniku konwersji powstaje więc tablica obiektów, w której każdy obiekt ma te same klucze. Nie można w ten sposób uzyskać hierarchii typu {"adres": {"miasto": "Warszawa", "kod": "00-001"}}. Gdybyś chciał taki efekt, musiałbyś skorzystać z dodatkowej logiki, której narzędzie nie implementuje. W drugą stronę (JSON → CSV) konieczne jest spłaszczanie zagnieżdżeń, ale w tej konwersji problem nie występuje.
Wybór separatora ma znaczenie
W przeciwieństwie do plików JSON lub XLSX, gdzie struktura jest jednoznaczna, CSV może używać przecinka (,), średnika (;) lub tabulatora (\t) jako separatora. Musisz wskazać właściwy. Błędny wybór powoduje, że narzędzie niepoprawnie dzieli wiersze na kolumny – zamiast trzech kolumn dostajesz jedną lub więcej. To najczęstsza przyczyna błędów parsowania.
Przecinki i znaki nowej linii w cudzysłowie – źródło błędów
Standard CSV (RFC 4180) definiuje reguły cytowania pól zawierających separator lub znaki nowej linii. Niestety wiele plików CSV generowanych przez różne programy nie przestrzega tych reguł. Jeśli w polu znajduje się przecinek, a pole nie jest otoczone cudzysłowami, parser uzna ten znak za separator. Jeśli w polu jest znak nowej linii, a cudzysłowy są pominięte, wiersz zostanie przerwany. Narzędzie sygnalizuje takie sytuacje komunikatem o błędzie parsowania.
Wejścia, wyjścia i opcje użytkownika
Dane wejściowe
Narzędzie przyjmuje jeden plik w formacie CSV.
Ustawienia użytkownika
- Separator CSV – do wyboru: przecinek, średnik, tabulator. Wartość domyślna to przecinek.
Dane wyjściowe
Po zakończeniu konwersji otrzymujesz:
- plik JSON do pobrania,
- podgląd przekonwertowanych danych (pierwsze 8 wierszy i 8 kolumn),
- liczbę wierszy i kolumn w tabeli źródłowej,
- rozmiar pliku wynikowego.
Podgląd pozwala sprawdzić, czy struktura JSON odpowiada oczekiwaniom, zanim pobierzesz plik. Jeśli w podglądzie widzisz stringi zamiast liczb, wiesz, że po stronie odbiorcy musisz wykonać konwersję typów.
Reguły, limity i komunikaty błędów
Błędy parsowania CSV
Jeśli plik CSV zawiera niespójności (np. wiersze o różnej liczbie kolumn, źle zamknięte cudzysłowy), narzędzie wyświetla komunikat:
"This CSV could not be parsed."
Brak danych
Jeśli plik nie zawiera żadnych wierszy z danymi (np. jest pusty lub zawiera tylko nagłówki), pojawia się:
"This file has no table rows."
Przekroczenie limitów
- Za dużo wierszy:
"This table has more than ‹max› rows." - Za dużo kolumn:
"This table has more than ‹max› columns."
Liczby max są określone przez narzędzie. Limit dla wierszy wynosi 10 000, a dla kolumn 200. Jeśli Twój plik przekracza te wartości, rozważ podział na mniejsze części.
Za duży plik
"This file is too large. Use a file under ‹max›." – limit wielkości pliku to 8 MB.
Brak wyboru pliku
"Choose one file first."
Nieobsługiwany format
"Choose a CSV, JSON or XLSX file."
Przekroczenie czasu
"This conversion is taking too long. Try a smaller file." – może wystąpić przy bardzo dużych plikach lub słabym sprzęcie.
Ochrona zer wiodących
Każde pole w CSV jest traktowane jako string, więc kody pocztowe, numery identyfikacyjne czy inne wartości z zerami na początku pozostają nienaruszone. Problem pojawia się dopiero wtedy, gdy zaimportujesz wynikowy JSON do środowiska, które automatycznie konwertuje stringi na liczby (np. JavaScript w przeglądarce). Wtedy "00123" zmieni się w 123. Aby tego uniknąć, po stronie odbiorcy musisz jawnie traktować te wartości jako teksty.
Znaki nowej linii w cudzysłowie
Jeśli plik CSV zawiera pola wielowierszowe (np. opis produktu), znaki nowej linii zostają zachowane jako sekwencja w stringu JSON. To zachowanie jest zgodne z oczekiwaniami, ale upewnij się, że Twój parser JSON obsługuje takie sekwencje.
Kto korzysta z tej konwersji
Deweloper przed API
Odbierasz eksport z bazy danych w formacie CSV i musisz przekazać go do aplikacji JavaScript, która oczekuje JSON-a. Zamiast pisać własny parser, wgrywasz plik do narzędzia, ustawiasz separator i pobierasz gotowy wynik. Oszczędzasz czas i unikasz błędów implementacji.
Analityk z danymi wrażliwymi na typ
Pracujesz z plikiem adresowym, w którym kody pocztowe mają zera wiodące. Konwersja zachowuje je, dopóki nie zaimportujesz JSON-a do środowiska, które automatycznie rzutuje stringi na liczby. Wiesz, że musisz ustawić odpowiedni typ kolumny w docelowej bazie.
Zespół łączący Excela z JSON-em
Nietechniczny członek zespołu przygotowuje dane w Excelu i zapisuje jako CSV. Ty musisz wczytać je do aplikacji napisanej w Node.js. Narzędzie działa w przeglądarce – nie przesyłasz pliku na serwer, więc dane wrażliwe (np. adresy e-mail) nie trafiają do zewnętrznej infrastruktury.
Student przygotowujący dane do projektu
Masz jednorazowy zestaw danych w CSV (np. wyniki ankiety, dane pogodowe) i potrzebujesz struktury JSON, którą wczytasz w skrypcie Python lub JavaScript. Narzędzie pozwala szybko przekształcić dane bez instalowania dodatkowego oprogramowania.
Dlaczego CSV jest trudniejszy niż się wydaje
Różne warianty separatora
W plikach generowanych przez polskie programy często spotyka się średnik (;) jako separator, ponieważ przecinek występuje jako separator dziesiętny. W systemach anglosaskich standardem jest przecinek (,). Tabulator pojawia się w eksportach z systemów mainframe lub starszych baz danych. Wybór niewłaściwego separatora powoduje, że wiersze są dzielone w złych miejscach – zamiast kolumny cena i miasto dostajesz cena;miasto w jednym polu.
Niespójne cytowanie
Standard RFC 4180 mówi, że pola zawierające separator, cudzysłów lub znak nowej linii powinny być otoczone cudzysłowem, a cudzysłów wewnątrz pola podwajany. W praktyce wiele generatorów CSV ignoruje te zasady. Jeśli plik zawiera pole z przecinkiem bez cudzysłowu, parser uzna ten przecinek za separator i zniszczy strukturę wiersza. Narzędzie sygnalizuje to komunikatem o błędzie parsowania, ale nie próbuje domyślnie naprawić danych.
Brak informacji o typie
JSON rozróżnia typy: "123" (string), 123 (number), true (boolean), null. CSV nie zna tych rozróżnień. Każde pole w CSV jest ciągiem znaków. Jeśli chcesz, aby w JSON wartość "123" stała się liczbą 123, musisz samodzielnie skonwertować ją po pobraniu pliku. Narzędzie nie próbuje odgadnąć typu, ponieważ byłoby to zgadywanie obarczone ryzykiem błędów (np. kod pocztowy 00-001 zostałby uznany za string, a 12345 za liczbę – w rzeczywistości oba są kodami pocztowymi i powinny pozostać stringami).
FAQ – najczęściej zadawane pytania
Dlaczego w JSON wszystkie wartości są stringami, nawet jeśli w CSV są liczbami?
CSV nie przechowuje informacji o typach danych. Każde pole w pliku CSV jest ciągiem znaków. Narzędzie nie podejmuje próby odgadnięcia typu, ponieważ mogłoby to prowadzić do błędów (np. kody pocztowe z zerami wiodącymi zostałyby uznane za liczby i straciłyby zera). Jeśli potrzebujesz liczb w JSON, skonwertuj je ręcznie po pobraniu pliku.
Moje CSV ma średnik zamiast przecinka. Co robić?
Wybierz separator Średnik (;) w ustawieniach narzędzia. Jeśli plik używa tabulatora, wybierz Tabulator. Narzędzie nie wykrywa automatycznie separatora – musisz go wskazać.
Czy mogę przekonwertować plik z kolumnami o różnej liczbie wierszy?
CSV musi mieć stałą liczbę kolumn w każdym wierszu. Jeśli wiersze różnią się liczbą pól, narzędzie wyświetli komunikat o błędzie parsowania. Przed konwersją uzupełnij brakujące wartości lub usuń wiersze z nieprawidłową strukturą.
Jak zachować zera wiodące w kodach pocztowych?
Narzędzie traktuje wszystkie pola jako stringi, więc zera wiodące są zachowane w pliku JSON. Problem pojawia się, gdy wczytasz ten JSON do środowiska, które automatycznie konwertuje stringi na liczby (np. JavaScript w przeglądarce). Aby tego uniknąć, upewnij się, że parser JSON nie rzutuje wartości na liczby, lub po wczytaniu jawnie traktuj te pola jako tekst.
Mój plik CSV nie parsuje się. Co jest nie tak?
Sprawdź, czy pola zawierające przecinki są otoczone cudzysłowami. Upewnij się, że cudzysłowy są prawidłowo zamknięte. Jeśli plik zawiera znaki nowej linii wewnątrz pól, muszą one być otoczone cudzysłowami. W razie wątpliwości otwórz plik w edytorze tekstu i sprawdź strukturę.
Czy mogę przekonwertować plik większy niż 5 MB?
Narzędzie ma limit wielkości pliku, który wynosi 8 MB. Jeśli Twój plik jest większy, podziel go na mniejsze części za pomocą narzędzi do wycinania wierszy (np. head i tail w systemie Unix, lub w edytorze arkuszy kalkulacyjnych). Pamiętaj, że przy dużych plikach konwersja może zająć dużo czasu lub przekroczyć limit czasu narzędzia.