Dane

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 01234 staje się liczbą 1234, tracąc początkowe zero.
  • Kod produktu taki jak 1-2 staje 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, yes i no są odczytywane jako prawda lub fałsz — więc kolumna z krajami zawierająca NO dla 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.