CSV, JSON i YAML
Trzy formaty niosą większość danych strukturalnych na świecie. Konwertowanie między nimi jest łatwe; konwertowanie bez po cichu zepsucia czegoś wymaga odrobiny uwagi.
Opublikowano
Do czego służy każdy z nich
CSV to tabela: wiersze i kolumny, nic więcej. Można go odczytać wszędzie, jest bardzo mały i nie potrafi wyrazić niczego zagnieżdżonego. JSON to drzewo — obiekty w tablicach w obiektach — i to nim mówi niemal każde API internetowe. YAML wyraża te same struktury co JSON, ale za pomocą wcięć zamiast nawiasów klamrowych, co czyni go znacznie przyjemniejszym do czytania i edycji dla ludzi i dlatego pliki konfiguracyjne zaczęły do niego dryfować.
Pułapka konwersji typów
To właśnie ta pułapka naprawdę kosztuje ludzi pieniądze. CSV zawiera tylko tekst — nie ma sposobu, by oznaczyć wartość jako liczbę, datę lub ciąg znaków. Konwertery więc zgadują, a zgadywania często są błędne:
- Kod pocztowy taki jak
01234staje się liczbą1234, tracąc początkowe zero. - Kod produktu taki jak
1-2staje się datą. - Długi numer konta staje się liczbą zmiennoprzecinkową i traci końcowe cyfry.
NA, oznaczające Amerykę Północną, staje się „niedostępne”.
Każda z tych zmian jest cicha. Dlatego staranna konwersja CSV na JSON powinna zostawiać każdą wartość jako ciąg znaków i pozwalać ci zdecydować — co robi konwerter w tym serwisie celowo, choć na pierwszy rzut oka wygląda to pedantycznie.
Co nie przetrwa podróży do CSV
Zagnieżdżenia. Tablica JSON płaskich obiektów staje się czystą tabelą. W chwili, gdy wartość sama jest obiektem lub tablicą, nie ma kolumny, do której ją włożyć. Opcje to spłaszczenie z kluczami złożonymi, zapisanie zagnieżdżonej części z powrotem jako tekst w komórce lub jej pominięcie — a ciche pominięcie jest najgorsze z trzech. Zapisanie jej z powrotem jako tekstu JSON w komórce przynajmniej pozwala odzyskać dane.
Ostre krawędzie YAML
YAML jest przyjemny w czytaniu i niezwykle łatwo w nim o błąd.
- Wcięcia są strukturą, a tabulatory są niedozwolone. Źle umieszczona spacja zmienia znaczenie, zamiast powodować błąd.
- Niektóre gołe słowa są wartościami logicznymi. W starszym YAML
y,n,on,off,yesinosą odczytywane jako prawda lub fałsz — więc kolumna z krajami zawierającaNOdla Norwegii staje sięfalse. Ujmuj je w cudzysłowy. - Komentarze znikają przy konwersji na JSON, ponieważ JSON nie ma sposobu, by je przedstawić.
Podróż w obie strony nie jest gwarantowana
Konwersja JSON na YAML i z powrotem zwykle zwraca to, od czego zacząłeś. Konwersja CSV na JSON i z powrotem zwykle nie: styl cudzysłowów, kolejność kolumn dla rekordów o różnych kształtach i reprezentacja pustych wartości to wszystko wybory, a różne narzędzia wybierają różnie. Jeśli podróż w obie strony ma być dokładna, zweryfikuj ją zamiast zakładać.
Aby przejść między nimi: konwertuj CSV na JSON, konwertuj JSON na CSV lub konwertuj JSON na YAML — i sprawdź wynik, bo podróż w obie strony nie zawsze jest dokładna.