Niezależnie od tego, czy konfigurujesz aplikację webową, wymieniasz dane między usługami, analizujesz eksport z arkusza kalkulacyjnego czy czytasz odpowiedź API, napotkasz dane przechowywane w ustrukturyzowanych formatach tekstowych. Cztery najczęstsze to JSON, YAML, CSV i XML.
Każdy format został zaprojektowany z innymi celami, a wybór właściwego zależy od Twojego przypadku użycia. Ten artykuł wyjaśnia, czym jest każdy format, jak wygląda, kiedy go używać i jak się porównują.
JSON — JavaScript Object Notation
JSON stał się dominującym formatem wymiany danych w sieci. Pomimo nazwy jest niezależny od języka i używany wszędzie.
Przykład składni:
{
"name": "Alice Martin",
"age": 34,
"skills": ["Python", "SQL", "Docker"],
"address": {
"city": "Lyon",
"country": "France"
}
}
Kluczowe cechy:
- Pary klucz-wartość z czystą, czytelną składnią
- Obsługuje ciągi znaków, liczby, wartości logiczne, tablice, obiekty i null
- Brak komentarzy w standardowym JSON
- Ścisła składnia — końcowe przecinki i pojedyncze cudzysłowy to błędy
Typowe zastosowania: REST API, pliki konfiguracyjne (package.json, tsconfig.json), bazy NoSQL (MongoDB), wymiana danych między frontendem a backendem.
Warto wiedzieć. Ścisła składnia JSON jest zarówno siłą, jak i słabością. Sprawia, że parsowanie jest niezawodne i jednoznaczne, ale oznacza też, że jeden brakujący przecinek lub dodatkowy końcowy przecinek zepsuje cały plik.
YAML — YAML Ain't Markup Language
YAML został zaprojektowany jako najbardziej czytelny dla człowieka format serializacji danych. Używa wcięć zamiast nawiasów i jest szczególnie popularny w plikach konfiguracyjnych.
Przykład składni:
name: Alice Martin
age: 34
skills:
- Python
- SQL
- Docker
address:
city: Lyon
country: France
Kluczowe cechy:
- Struktura oparta na wcięciach (bez nawiasów i klamer)
- Obsługuje komentarze za pomocą
# - Obsługuje wszystkie typy danych JSON plus więcej (daty, ciągi wieloliniowe)
- Wrażliwy na białe znaki — nieprawidłowe wcięcie psuje plik
Typowe zastosowania: Pliki Docker Compose, manifesty Kubernetes, pipeline'y CI/CD (GitHub Actions, GitLab CI), playbooki Ansible, konfiguracje Hugo/Jekyll.
YAML jest nadzbiorem JSON, co oznacza, że każdy poprawny dokument JSON jest również poprawnym YAML. Jednakże elastyczność YAML może być mieczem obosiecznym — jego niejawne rzutowanie typów (na przykład yes interpretowane jako boolean true lub 3.10 stające się 3.1) spowodowało wiele subtelnych błędów.
CSV — Comma-Separated Values
CSV jest najprostszym ustrukturyzowanym formatem danych. Przechowuje dane tabelaryczne jako zwykły tekst, gdzie każda linia to wiersz, a wartości są oddzielone przecinkami (lub czasem średnikami, tabulatorami czy innymi separatorami).
Przykład składni:
name,age,city,country
Alice Martin,34,Lyon,France
Bob Dupont,28,Paris,France
Carol Smith,41,London,UK
Kluczowe cechy:
- Niezwykle prosty — tylko tekst z separatorami
- Brak typów danych — wszystko jest ciągiem znaków
- Brak standardowego sposobu reprezentowania zagnieżdżonych danych
- Brak oficjalnego uniwersalnego standardu (RFC 4180 istnieje, ale nie jest powszechnie przestrzegany)
- Bardzo małe rozmiary plików
Typowe zastosowania: Eksporty z arkuszy kalkulacyjnych, importy/eksporty z baz danych, analiza danych (pandas, R), prosta wymiana danych, pliki logów.
Prostota CSV jest jego największą siłą i największym ograniczeniem. Doskonale nadaje się do płaskich danych tabelarycznych, ale nie może reprezentować struktur hierarchicznych. Przypadki brzegowe (przecinki w wartościach, pola wieloliniowe, problemy z kodowaniem) sprawiają, że parsowanie jest bardziej złożone, niż się na początku wydaje.
XML — Extensible Markup Language
XML był dominującym formatem wymiany danych, zanim JSON przejął pałeczkę. Używa składni opartej na znacznikach, podobnej do HTML, i obsługuje złożone funkcje, takie jak schematy, przestrzenie nazw i transformacje.
Przykład składni:
<?xml version="1.0" encoding="UTF-8"?>
<person>
<name>Alice Martin</name>
<age>34</age>
<skills>
<skill>Python</skill>
<skill>SQL</skill>
<skill>Docker</skill>
</skills>
<address>
<city>Lyon</city>
<country>France</country>
</address>
</person>
Kluczowe cechy:
- Struktura oparta na znacznikach z tagami otwierającymi i zamykającymi
- Obsługuje atrybuty, przestrzenie nazw, schematy (XSD) i transformacje (XSLT)
- Obsługuje komentarze
- Bardzo rozwlekły w porównaniu z innymi formatami
- Niezwykle dobrze zdefiniowany standard ze ścisłą walidacją
Typowe zastosowania: Usługi sieciowe SOAP, integracje korporacyjne, formaty dokumentów (DOCX, SVG, RSS), pliki konfiguracyjne w ekosystemach Java/.NET, wymiana danych rządowych i finansowych.
XML jest bardziej rozwlekły niż JSON czy YAML, ale jego możliwości walidacji schematów sprawiają, że jest nieoceniony w kontekstach, gdzie integralność danych i formalne kontrakty między systemami są kluczowe.
Porównanie obok siebie
| Funkcja | JSON | YAML | CSV | XML |
|---|---|---|---|---|
| Czytelność dla człowieka | Dobra | Doskonała | Dobra (tabelaryczne) | Średnia |
| Rozwlekłość | Niska | Niska | Bardzo niska | Wysoka |
| Komentarze | Nie | Tak | Nie | Tak |
| Zagnieżdżone dane | Tak | Tak | Nie | Tak |
| Typy danych | Podstawowe | Bogate | Brak (wszystko to ciągi) | Przez schemat |
| Walidacja schematu | JSON Schema | Brak standardu | Nie | XSD |
| Rozmiar pliku | Mały | Mały | Najmniejszy | Duży |
| Szybkość parsowania | Szybka | Umiarkowana | Szybka | Umiarkowana |
| Główna domena | Web API | Konfiguracja DevOps | Dane/arkusze | Korporacje |
Kiedy użyć którego
- Wybierz JSON, gdy budujesz API webowe, przechowujesz konfigurację dla projektów JavaScript/TypeScript lub wymieniasz dane między usługami. To domyślny wybór dla większości nowoczesnych aplikacji.
- Wybierz YAML, gdy piszesz pliki konfiguracyjne, które ludzie będą często czytać i edytować. Jego czytelność i obsługa komentarzy czynią go idealnym dla DevOps i infrastructure-as-code.
- Wybierz CSV, gdy pracujesz z danymi tabelarycznymi, importujesz/eksportujesz z arkuszy kalkulacyjnych lub baz danych, lub gdy rozmiar pliku musi być minimalny. Unikaj go dla wszystkiego, co hierarchiczne.
- Wybierz XML, gdy pracujesz z systemami korporacyjnymi, SOAP API lub kontekstami wymagającymi formalnej walidacji schematu. To również właściwy wybór, gdy potrzebujesz znaczników zorientowanych na dokumenty (jak SVG czy RSS).
Konwersja między formatami
Konwersja między tymi formatami to częste zadanie. Kilka rzeczy do zapamiętania:
- JSON do YAML (i odwrotnie) jest zazwyczaj bezstratna, ponieważ YAML jest nadzbiorem JSON.
- CSV do JSON/YAML działa dobrze dla płaskich danych, ale wymaga decyzji o strukturze dla zagnieżdżonego wyniku.
- XML do JSON może utracić informacje (atrybuty, przestrzenie nazw, kolejność), ponieważ JSON nie ma odpowiadających konceptów.
- Dowolny format do CSV działa tylko wtedy, gdy dane są płaskie lub mogą być sensownie spłaszczone.
Wskazówka. Przy konwersji między formatami zawsze weryfikuj wynik. Automatyczne konwersje mogą po cichu tracić dane, szczególnie z atrybutami XML, rzutowaniem typów YAML czy przypadkami brzegowymi kodowania CSV.
Więcej informacji
ToolK.io udostępnia bezpłatne narzędzia do konwersji między JSON, YAML, CSV i XML, formatowania i walidacji danych oraz powiązane samouczki do pracy z danymi ustrukturyzowanymi w Twoich projektach.
