Inżynier DevOps eksportuje konfigurację Kubernetes jako YAML, ale musi ją wysłać do API, które akceptuje tylko JSON. Analityk otrzymuje dane odpowiedzi API w JSON, ale potrzebuje ich w arkuszu kalkulacyjnym. Data scientist eksportuje CSV z bazy danych, ale potrzebuje ustrukturyzowanego JSON-a dla dashboardu webowego.
Konwersja formatów to nie tylko operacja mechaniczna. Każdy format dokonuje innych kompromisów, a zrozumienie co się traci przy konwersji jest równie ważne jak umiejętność samej konwersji.
Trzy formaty, trzy filozofie
Każdy format został zaprojektowany dla innej grupy odbiorców i innego problemu:
| Format | Powstał | Zaprojektowany dla | Główna filozofia |
|---|---|---|---|
| CSV | ~1972 | Wymiana danych między programami | Maksymalna prostota — tylko wiersze i kolumny |
| JSON | 2001 | Wymiana danych w sieci | Czytelne dla maszyn dane strukturalne ze ścisłymi regułami |
| YAML | 2001 | Pliki konfiguracyjne | Czytelne dla ludzi dane strukturalne z minimalną składnią |
CSV zakłada, że twoje dane to płaska tabela. Każda wartość to tekst. Nie ma pojęcia zagnieżdżania, typów ani metadanych.
JSON zakłada, że twoje dane mają strukturę — obiekty, tablice, typy (stringi, liczby, wartości logiczne, null). Jest ścisły i jednoznaczny, co czyni go idealnym dla maszyn, ale rozwlekłym dla ludzi.
YAML zakłada, że człowiek będzie czytał i edytował plik. Używa wcięć zamiast nawiasów klamrowych, obsługuje komentarze i ma bardziej swobodną składnię. Technicznie YAML jest nadzbiorem JSON — każdy prawidłowy dokument JSON jest również prawidłowym YAML-em.
YAML jest nadzbiorem JSON Możesz wkleić dokument JSON bezpośrednio do parsera YAML i zadziała. W drugą stronę to nie działa — funkcje YAML takie jak komentarze, kotwice i wieloliniowe ciągi znaków nie mają odpowiednika w JSON.
Praktyczne scenariusze konwersji
Migracja konfiguracji (JSON na YAML, YAML na JSON)
To najczęstsza konwersja. Różne narzędzia oczekują różnych formatów konfiguracji:
- Docker Compose, Kubernetes, GitHub Actions, Ansible używają YAML
- package.json, tsconfig.json, ESLint używają JSON
- Migracja między narzędziami często oznacza konwersję konfiguracji
Ta konwersja jest bezstratna w obu kierunkach dla zawartości danych — ale komentarze YAML są tracone przy konwersji na JSON, ponieważ JSON nie ma składni komentarzy.
Analiza danych (JSON na CSV)
Odpowiedzi API przychodzą w JSON. Analitycy potrzebują arkuszy kalkulacyjnych. Ta konwersja działa dobrze dla płaskich tablic JSON — tablice obiektów z identycznymi kluczami naturalnie mapują się na wiersze i kolumny.
Ale zawodzi przy zagnieżdżonych danych. Obiekt JSON z polem address.city i tablicą skills nie ma naturalnej reprezentacji CSV. Konwerter musi wybrać: spłaszczyć zagnieżdżone klucze (address.city staje się kolumną), serializować zagnieżdżone wartości jako stringi lub je odrzucić.
Import danych (CSV na JSON)
Odwrotny scenariusz: importowanie danych z arkusza kalkulacyjnego do aplikacji webowej lub API. Konwersja CSV na JSON tworzy tablicę obiektów z nagłówkami kolumn jako kluczami. Problem polega na tym, że CSV nie ma informacji o typach — liczba 42, string "42" i wartość logiczna true to w CSV po prostu tekst. Konwerter musi odgadywać typy.
Czytelność (JSON na YAML)
Czasem po prostu musisz uczynić gęsty plik konfiguracyjny JSON czytelnym. Konwersja na YAML daje czyste wcięcia i możliwość dodania komentarzy do dokumentacji. Jest to szczególnie cenne dla dużych plików konfiguracyjnych utrzymywanych przez zespół.
Co się traci przy konwersji
To kluczowa wiedza, która oszczędza czas debugowania:
| Konwersja | Co się traci |
|---|---|
| YAML na JSON | Komentarze (JSON nie ma składni komentarzy) |
| JSON na CSV | Zagnieżdżenie (CSV jest płaski), typy (wszystko staje się tekstem), tablice |
| CSV na JSON | Nic (ale typy muszą być wywnioskowane — "42" vs 42) |
| CSV na YAML | Nic (ten sam problem wnioskowania typów) |
| JSON na YAML | Nic (YAML jest nadzbiorem JSON) |
| YAML na CSV | Komentarze, zagnieżdżenie, typy, kotwice/aliasy |
Wzorzec jest jasny: konwersje w kierunku CSV tracą najwięcej informacji, ponieważ CSV jest najprostszym formatem. Konwersje między JSON a YAML są prawie bezstratne. A komentarze YAML są zawsze tracone przy opuszczaniu YAML-a.
Dwukierunkowe vs. jednokierunkowe JSON-na-YAML i YAML-na-JSON są efektywnie dwukierunkowe (bezpieczne w obie strony, z wyjątkiem komentarzy). JSON-na-CSV i YAML-na-CSV są jednokierunkowe dla złożonych danych — nie można zrekonstruować zagnieżdżenia z płaskiego CSV.
Typowe pułapki przy konwersji
Pułapki koercji typów w YAML
YAML automatycznie interpretuje pewne stringi jako typy inne niż string. Słowo no staje się wartością logiczną false. Słowo yes staje się true. String 1.0 staje się liczbą zmiennoprzecinkową. Kody krajów takie jak NO (Norwegia) słynnie powodowały błędy. Zawsze umieszczaj niejednoznaczne wartości w cudzysłowie w YAML.
Problemy z separatorem i kodowaniem CSV
Nie wszystkie CSV-y używają przecinków. Europejskie CSV-y często używają średników (ponieważ przecinki są separatorami dziesiętnymi w wielu europejskich formatach liczbowych). Wartości rozdzielane tabulatorem (TSV) to inna odmiana. A niezgodności kodowania znaków (UTF-8 vs Latin-1) produkują zniekształcone znaki diakrytyczne.
Problem końcowego przecinka w JSON
JSON nie pozwala na końcowy przecinek. To jest poprawny JavaScript: {"a": 1, "b": 2,} — ale to niepoprawny JSON. Jeden końcowy przecinek powoduje błąd parsowania.
Wydajność przy dużych zbiorach danych
Dla zbiorów z milionami wierszy CSV jest znacznie wydajniejszy niż JSON lub YAML. JSON dodaje nawiasy klamrowe, kwadratowe i cudzysłowy dla każdej wartości. CSV z milionem wierszy może mieć 50 MB; równoważny JSON mógłby mieć 150 MB.
Wybór właściwego formatu od początku
Zamiast konwertować po fakcie, wybór właściwego formatu z góry zapobiega utracie informacji:
- Dane tabelaryczne do arkuszy lub baz danych — CSV
- Dane strukturalne dla API lub aplikacji webowych — JSON
- Konfiguracja edytowana przez ludzi — YAML
- Złożone zagnieżdżone dane z komentarzami — YAML
- Wymiana danych między systemami — JSON
Dowiedz się więcej
Konwertuj między JSON, YAML i CSV natychmiast za pomocą narzędzi przeglądarkowych:
- Konwertuj formaty danych — wklej dane, wybierz format docelowy, pobierz wynik
- Formater JSON — waliduj, formatuj i minifikuj JSON
- Konwerter JSON na CSV — konwertuj tablice JSON na CSV gotowy do arkusza
- Konwerter YAML-JSON — konwertuj między YAML i JSON z obsługą komentarzy
