CSV και JSON: δύο τρόποι να μεταφέρετε τα ίδια δεδομένα
Τα περισσότερα πινακοποιημένα δεδομένα καταλήγουν σε μία από δύο μορφές. Το CSV είναι η μητρική γλώσσα του υπολογιστικού φύλλου: ένα αρχείο απλού κειμένου όπου κάθε γραμμή είναι μια σειρά και τα κόμματα διαχωρίζουν τις στήλες. Το JSON είναι η γλώσσα των API και των εφαρμογών: μια δομημένη μορφή κειμένου χτισμένη από αντικείμενα (ζεύγη κλειδιού και τιμής) και πίνακες (διατεταγμένες λίστες). Περιγράφουν την ίδια πληροφορία με πολύ διαφορετικά σχήματα, γι' αυτό ακριβώς η μετατροπή μεταξύ τους εμφανίζεται τόσο συχνά. Αυτή η σελίδα κάνει αυτή τη μετατροπή και προς τις δύο κατευθύνσεις, εξ ολοκλήρου μέσα στον browser σας.
Το CSV λάμπει όπου ένα πλέγμα φαίνεται φυσικό. Εξάγετε μια αναφορά από μια βάση δεδομένων, κατεβάζετε μια λίστα παραγγελιών, ή αποθηκεύετε ένα φύλλο από το Excel ή τα Google Sheets, και σχεδόν πάντα παίρνετε CSV. Είναι συμπαγές, αναγνώσιμο από ανθρώπους, και κάθε εργαλείο αναλυτικής στη Γη μπορεί να το ανοίξει. Το JSON λάμπει όπου το λογισμικό μιλάει με λογισμικό. Τα REST API το στέλνουν και το λαμβάνουν, τα αρχεία διαμόρφωσης το χρησιμοποιούν, και η JavaScript το διαβάζει χωρίς καμία βιβλιοθήκη ανάλυσης. Όταν χρειάζεται να τροφοδοτήσετε μια εξαγωγή υπολογιστικού φύλλου σε ένα API ή να τραβήξετε μια απόκριση API σε ένα υπολογιστικό φύλλο, στην πραγματικότητα μεταφράζετε ανάμεσα σε αυτούς τους δύο κόσμους.

Πώς σειρές και κεφαλίδες γίνονται αντικείμενα
Η αντιστοίχιση είναι απλούστερη απ' όσο φαίνεται. Η πρώτη γραμμή ενός αρχείου CSV είναι συνήθως η γραμμή κεφαλίδων, και αυτά τα ονόματα κεφαλίδων γίνονται τα κλειδιά στο JSON. Κάθε επόμενη γραμμή γίνεται ένα αντικείμενο, όπου κάθε κελί συνδυάζεται με την αντίστοιχη κεφαλίδα. Ολόκληρο το αρχείο γίνεται ένας πίνακας από αυτά τα αντικείμενα. Έτσι ένα CSV με στήλες name,email,age μετατρέπεται σε μια λίστα όπως [{"name": "Ada", "email": "ada@example.com", "age": "36"}, ...]. Προς την αντίθετη κατεύθυνση, το JSON σε CSV διαβάζει τα κλειδιά του πρώτου αντικειμένου για να χτίσει τη γραμμή κεφαλίδων, μετά γράφει μία σειρά ανά αντικείμενο. Είναι μια καθαρή, προβλέψιμη διαδρομή μετ' επιστροφής, εφόσον τα δεδομένα σας είναι γνησίως πινακοποιημένα.
Οι παγίδες που αξίζει να γνωρίζετε
Το CSV φαίνεται τετριμμένο αλλά κρύβει μερικές αιχμηρές γωνίες. Η μεγαλύτερη είναι τα κόμματα μέσα σε ένα πεδίο. Αν μια διεύθυνση περιέχει «Βερολίνο, Γερμανία», ένας απλοϊκός διαχωρισμός σε κόμματα θα έσκιζε αυτή τη μοναδική τιμή σε δύο στήλες. Το πρότυπο CSV το χειρίζεται τυλίγοντας τέτοια πεδία σε διπλά εισαγωγικά, και τα εισαγωγικά μέσα σε ένα πεδίο εντός εισαγωγικών διπλασιάζονται (""). Ένας καλός μετατροπέας σέβεται αυτούς τους κανόνες ώστε τα δεδομένα σας να μη μετατοπίζονται σιωπηλά μεταξύ στηλών. Προσέξτε επίσης τον διαχωριστή: πολλές ευρωπαϊκές εξαγωγές χρησιμοποιούν ερωτηματικό αντί για κόμμα, επειδή το κόμμα είναι ήδη δεκαδικός διαχωριστής εκεί. Εμφανίζονται επίσης tab και pipe.
Η βαθύτερη διαφορά είναι οι τύποι. Το CSV δεν έχει καμία έννοια τύπων δεδομένων. Όλα είναι κείμενο, οπότε ο αριθμός 42, η boolean τιμή true, και ένα κενό κελί φαίνονται όλα σαν απλά strings. Το JSON, αντίθετα, διακρίνει αριθμούς, strings, booleans, null, και ένθετες δομές. Όταν μετατρέπετε CSV σε JSON, οι τιμές φτάνουν ως strings εκτός αν πείτε στο εργαλείο να ερμηνεύσει αριθμούς και booleans. Η μετατροπή JSON σε CSV έχει το αντίθετο πρόβλημα: τα ένθετα αντικείμενα και οι πίνακες δεν χωράνε ωραία σε ένα επίπεδο πλέγμα, οπότε συνήθως επιπεδοποιούνται ή μετατρέπονται σε string μέσα σε ένα κελί. Η γνώση αυτού εκ των προτέρων σας γλιτώνει από το να αναρωτιέστε γιατί μια στήλη «φαίνεται λάθος» αργότερα.

Μια πραγματική διαδρομή μετ' επιστροφής
Ορίστε ένα σενάριο που εμφανίζεται συνεχώς. Ένας συνάδελφος σας στέλνει ένα υπολογιστικό φύλλο νέων χρηστών και σας ζητά να τους φορτώσετε μέσω ενός εσωτερικού API. Το API δέχεται μόνο JSON. Εξάγετε το φύλλο σε CSV, το επικολλάτε εδώ, και παίρνετε πίσω έναν καθαρό πίνακα αντικειμένων έτοιμο να τοποθετηθεί στο αίτημά σας. Αργότερα, το API επιστρέφει μια λίστα JSON των εγγραφών που δημιούργησε, και χρειάζεται να την παραδώσετε πίσω στον ίδιο συνάδελφο για αναθεώρηση. Επικολλάτε το JSON, το μετατρέπετε σε CSV, και ανοίγει κατευθείαν στο υπολογιστικό φύλλο του. Χωρίς scripts, χωρίς εγκαταστάσεις, μόνο δύο γρήγορες μεταφράσεις στη μέση μιας κανονικής ροής εργασίας.
Μόνο τοπικά, εξ ορισμού
Όλα αυτά εκτελούνται στον browser σας. Το CSV και το JSON σας αναλύονται και μετατρέπονται από JavaScript στο δικό σας μηχάνημα, και τίποτα δεν ανεβαίνει σε server. Αυτό έχει σημασία επειδή οι εξαγωγές συχνά περιέχουν πραγματικά ονόματα, email, στοιχεία παραγγελιών, ή εσωτερικά αναγνωριστικά που δεν θα έπρεπε να επικολλάτε σε μια τυχαία απομακρυσμένη υπηρεσία. Εδώ τα δεδομένα δεν εγκαταλείπουν ποτέ τη σελίδα. Αν θέλετε να τακτοποιήσετε το αποτέλεσμα στη συνέχεια, ο μορφοποιητής JSON μας θα το εμφανίσει ωραία μορφοποιημένο και θα το επικυρώσει, και μπορείτε να περιηγηθείτε στα υπόλοιπα εργαλεία μετατροπής δεδομένων μας για σχετικές μορφές.
Συχνές ερωτήσεις
Ανεβαίνουν τα δεδομένα μου κάπου;
Όχι. Η μετατροπή γίνεται εξ ολοκλήρου στον browser σας χρησιμοποιώντας JavaScript, οπότε το CSV και το JSON σας παραμένουν στη δική σας συσκευή και δεν αποστέλλονται ποτέ σε server.
Χειρίζεται ο μετατροπέας κόμματα μέσα σε πεδία;
Ναι. Τα πεδία που περιέχουν κόμματα πρέπει να τυλίγονται σε διπλά εισαγωγικά στο CSV, και ο αναλυτής σέβεται αυτά τα εισαγωγικά ώστε η τιμή να παραμείνει σε μία στήλη.
Γιατί οι αριθμοί μου εμφανίζονται ως κείμενο στο JSON;
Το CSV δεν έχει τύπους δεδομένων, οπότε κάθε κελί είναι απλό κείμενο. Οι τιμές γίνονται strings JSON εκτός αν εφαρμοστεί ανάλυση αριθμών και booleans, επειδή το αρχείο πηγής δεν δίνει τρόπο να ξεχωρίσει έναν αριθμό από μια λέξη.
Τι συμβαίνει στο ένθετο JSON όταν μετατρέπω σε CSV;
Ένα επίπεδο πλέγμα δεν μπορεί να κρατήσει ένθετες δομές, οπότε τα ένθετα αντικείμενα και πίνακες συνήθως επιπεδοποιούνται ή γράφονται ως μία τιμή σε μορφή string μέσα σε ένα κελί.
Μπορώ να χρησιμοποιήσω ερωτηματικό ή tab αντί για κόμμα;
Ναι. Πολλές εξαγωγές, ειδικά ευρωπαϊκές, χρησιμοποιούν ερωτηματικά ή tab ως διαχωριστές, και το εργαλείο μπορεί να τα διαβάσει αντί για το τυπικό κόμμα.
Μετατρέπει και προς τις δύο κατευθύνσεις;
Ναι. Μπορείτε να μετατρέψετε CSV σε JSON και JSON πίσω σε CSV, κάτι που κάνει τις διαδρομές μετ' επιστροφής ανάμεσα σε υπολογιστικά φύλλα και API απλές.
