Po co zamieniać arkusz w JSON
CSV to format, który eksportują arkusze kalkulacyjne, systemy CRM, banki i panele analityczne. JSON to format, który przyjmują webowe API, kod JavaScript, bazy NoSQL i większość systemów konfiguracji. Ta konwersja pojawia się nieustannie: zasilenie testowej bazy danymi z arkusza prowadzonego przez kolegę, zamiana listy produktów w dane testowe do prototypu front-endu, przekazanie listy przekierowań lub tłumaczeń do skryptu budującego czy wysłanie partii rekordów do API, które przyjmuje tylko JSON.
Wynikiem jest tablica JSON z jednym obiektem na każdy wiersz danych. Wiersz nagłówka dostarcza nazwy właściwości, więc arkusz z kolumnami sku, title i price staje się obiektami z dokładnie tymi trzema kluczami, gotowymi do iterowania.
Jak parser czyta Twój CSV
CSV wygląda banalnie, dopóki wartość nie zawiera separatora. Parser stosuje zasady RFC 4180, najbliższego standardu, jaki ma CSV:
- Pole ujęte w podwójne cudzysłowy może zawierać separator, złamania linii i cudzysłowy.
"Smith, John"pozostaje jedną wartością. - Cudzysłów wewnątrz pola w cudzysłowach zapisuje się podwójnie:
"6"" pipe"staje się6" pipe. - Linie mogą kończyć się windowsowym CRLF lub uniksowym LF; obsługiwane są oba warianty.
- Znacznik kolejności bajtów (BOM) na początku, który Excel dodaje przy zapisie jako CSV UTF-8, jest usuwany, żeby nie przykleił się do nazwy pierwszej kolumny.
- Całkowicie puste linie są pomijane.
Separator jest wybierany przez policzenie przecinków, średników, tabulatorów i pionowych kresek w pierwszej linii i wybranie najczęstszego. Działa to dla niemal każdego eksportu, ale zakłada, że nagłówek jest reprezentatywny. Jeśli nagłówek to jedna kolumna bez separatorów, przyjmowany jest przecinek.
Spacje wokół nazw w nagłówku są obcinane, więc price staje się kluczem price. Wartości w wierszach danych pozostają dokładnie takie, jak zostały zapisane, łącznie ze spacjami na początku lub końcu.
Wartości typowane a ciągi znaków
Przy włączonej opcji „Wykrywaj liczby i wartości logiczne” każda komórka jest sprawdzana według krótkiej listy reguł:
- Zwykłe liczby całkowite i dziesiętne, takie jak
42,-7i19.99, stają się liczbami JSON, o ile mają najwyżej 15 cyfr. - Dokładnie
trueifalse, pisane małymi literami, stają się wartościami logicznymi.TRUE,Yesczy1zostają bez zmian. - Pusta komórka staje się
null. - Wszystko inne, łącznie z dłuższymi ciągami cyfr,
1.5e3,+5,.5,1,234i datami, pozostaje ciągiem znaków.
To wygodne dla większości danych, ale liczby w JSON nie niosą formatowania, więc niektóre wartości po typowaniu zmieniają znaczenie:
- Wiodące zera znikają. Amerykański kod pocztowy
02134staje się2134, a numer artykułu007staje się7. - Długie ciągi cyfr straciłyby precyzję. Liczby w JavaScripcie są dokładne tylko do około 15 cyfr znaczących, więc wartości z większą liczbą cyfr, jak 20-cyfrowy identyfikator zamówienia czy numer karty, są zachowywane jako ciągi znaków, zamiast być zaokrąglane.
- Numery telefonów bez znaku plus i spacji również stają się liczbami.
Jeśli którakolwiek kolumna zawiera identyfikatory, a nie ilości, wyłącz tę opcję i przekonwertuj kilka naprawdę liczbowych pól we własnym kodzie. Przy wyłączonej opcji puste komórki stają się pustymi ciągami zamiast null.
Gdy wynik wygląda źle
- Wszystko trafia do jednego klucza. Separator nie został wykryty, zwykle dlatego, że nagłówek ma inny separator niż dane albo nie ma go wcale. Sprawdź pierwszą linię.
- Wartości są przesunięte o jedną kolumnę. Pole zawiera separator, ale nie jest ujęte w cudzysłowy. Wyeksportuj dane ponownie z aplikacji źródłowej zamiast edytować je ręcznie; arkusze kalkulacyjne automatycznie ujmują takie pola w cudzysłowy.
- Dodatkowe kolumny znikają. Klucze pochodzą wyłącznie z nagłówka, więc komórki za ostatnią kolumną nagłówka są pomijane. Wiersze z mniejszą liczbą komórek dostają
nulllub pusty ciąg w miejsce brakujących. - Dwie kolumny, jeden klucz. Jeśli nagłówek powtarza nazwę, późniejsza kolumna nadpisuje wcześniejszą w każdym obiekcie. Najpierw zmień nazwę jednej z nich.
- Dziwne znaki, takie jak é. Plik został zapisany w starszym kodowaniu. Zapisz go ponownie jako CSV UTF-8 i wklej jeszcze raz.
Praca z wynikiem
JSON jest wypisywany z wcięciem 2 spacji, co nadaje się do czytania i do zatwierdzenia w repozytorium. Aby go zminifikować na potrzeby żądania API lub zmienić wcięcie, przepuść go przez formatowanie JSON. Aby po edycji pójść w drugą stronę, JSON na CSV odbuduje arkusz z tablicy. Konwersja odbywa się w całości na stronie, co ma znaczenie, gdy eksport zawiera nazwiska klientów, adresy e-mail czy wynagrodzenia.