Μεταφορά δεδομένων ανάμεσα σε CSV, JSON, YAML και XML
Τα δεδομένα σπάνια μένουν ακίνητα σε μία μορφή. Μια αναφορά φτάνει ως υπολογιστικό φύλλο, ένα API θέλει JSON, ένας αγωγός ανάπτυξης περιμένει YAML, και κάπου στο υπόγειο μια παλιά υπηρεσία εξακολουθεί να μιλάει XML. Η περισσότερη καθημερινή τριβή στη δουλειά με δεδομένα δεν είναι τα ίδια τα δεδομένα, είναι το να τα πάρετε από τη μορφή που έχετε στη μορφή που κάτι άλλο απαιτεί. Αυτή είναι όλη η δουλειά ενός μετατροπέα δεδομένων: παίρνει δομημένο κείμενο σε μία σημειογραφία και το επανεκδίδει σε άλλη, χωρίς να χάνεται το νόημα στην πορεία.
Οι μετατροπείς του Speedor τρέχουν εξ ολοκλήρου στο πρόγραμμα περιήγησής σας. Επικολλάτε, κάνετε κλικ, αντιγράφετε το αποτέλεσμα. Τίποτα δεν ανεβαίνει, τίποτα δεν καταγράφεται, και τίποτα δεν φεύγει από τη συσκευή σας. Για όποιον έχει διστάσει ποτέ πριν ρίξει ένα export πελατών σε μια τυχαία ιστοσελίδα, αυτός ο αποκλειστικά τοπικός σχεδιασμός είναι το νόημα.
Σε τι είναι πραγματικά καλή κάθε μορφή
Βοηθάει να ξέρετε γιατί υπάρχουν αυτές οι μορφές πριν αρχίσετε να μεταπηδάτε ανάμεσά τους, επειδή η καθεμία χτίστηκε για διαφορετική δουλειά.
Το CSV είναι το επίπεδο, χωρισμένο με κόμμα πλέγμα που αγαπούν τα υπολογιστικά φύλλα. Είναι πινακοειδές από τη φύση του: γραμμές και στήλες, τίποτα ένθετο. Ανοίξτε το σε Excel, Google Sheets, ή Numbers και απλά δουλεύει. Το πρόβλημα είναι ότι το CSV δεν έχει έννοια τύπων. Η τιμή 007 μπορεί να είναι string, αριθμός, ή ταχυδρομικός κώδικας, και το CSV δεν θα σας πει ποιο από τα δύο.
Το JSON είναι η κοινή γλώσσα του σύγχρονου ιστού. Σχεδόν κάθε API που θα καλέσετε ποτέ το μιλάει. Το JSON χειρίζεται φωλιάσματα, πίνακες, και μια χούφτα πραγματικών τύπων (strings, αριθμούς, boolean, null), κάτι που το κάνει πολύ πιο εκφραστικό από έναν επίπεδο πίνακα. Είναι συμπαγές, φιλικό προς μηχανές, και υποστηρίζεται παντού.
Το YAML είναι ο πιο ευανάγνωστος ξάδερφος του JSON. Χρησιμοποιεί εσοχή αντί για αγκύλες, υποστηρίζει σχόλια, και τείνει να είναι η προτιμώμενη μορφή για αρχεία ρυθμίσεων, Docker Compose, μανιφέστα Kubernetes, και αγωγούς CI. Όταν ένας άνθρωπος πρέπει να επεξεργαστεί κάτι με το χέρι, το YAML είναι συνήθως πιο ήπιο στα μάτια.
Το XML είναι ο γέρος σοφός. Πολυλογικό, γεμάτο tags, και ακόμη βαθιά ενσωματωμένο σε εταιρικά συστήματα, υπηρεσίες SOAP, οικονομική ανταλλαγή μηνυμάτων, και πρότυπα εγγράφων όπως το RSS. Θα το συναντήσετε λιγότερο συχνά σε νέα έργα, αλλά όταν πραγματικά το χρειάζεστε, πραγματικά το χρειάζεστε.

Πού πραγματικά συμβαίνουν οι μετατροπές
Τα σενάρια είναι αρκετά συγκεκριμένα μόλις αρχίσετε να κοιτάτε. Ας πούμε ότι το marketing σάς δίνει ένα υπολογιστικό φύλλο με 4.000 επαφές και το API εγγραφής δέχεται μόνο έναν πίνακα JSON. Εξάγετε το φύλλο σε CSV, το περνάτε από το CSV σε JSON, και έχετε ένα payload έτοιμο για POST. Χωρίς script-κόλλα, χωρίς pandas, χωρίς αναμονή για μηχανικό.
Ή τραβάτε ένα κομμάτι JSON πίσω από το ίδιο API και θέλετε να το ρίξετε σε ένα αρχείο ρυθμίσεων που διαβάζει η υπηρεσία σας κατά την εκκίνηση. Μετατρέψτε το με JSON σε YAML και παίρνετε κάτι καθαρό και σχολιάσιμο που ταιριάζει ακριβώς στο repo σας. Η αντίστροφη κατεύθυνση δουλεύει επίσης όταν ένα εργαλείο δέχεται μόνο JSON αλλά οι ρυθμίσεις σας ζουν σε YAML.
Και μετά υπάρχει η ενσωμάτωση που κανείς δεν απολαμβάνει: ένα σύστημα συνεργάτη που δέχεται μόνο XML. Χτίζετε το payload σας σε JSON επειδή έτσι σκέφτεται η εφαρμογή σας, και μετά μετατρέπετε σε XML στα σύνορα. Το σχήμα παραμένει το ίδιο, αλλάζει μόνο η σύνταξη.
Οι παγίδες που αξίζει να ξέρετε
Η μετατροπή μορφής δεν είναι πάντα χωρίς απώλειες, και το να προσποιείστε το αντίθετο οδηγεί σε σφάλματα. Μερικά πράγματα να θυμάστε:
Το CSV ξεχνά τους τύπους. Επειδή κάθε κελί είναι απλά κείμενο, οι αριθμοί, τα boolean, και οι ημερομηνίες βγαίνουν όλα ως strings εκτός αν ο μετατροπέας μαντεύει για εσάς. Αν το true πρέπει να είναι boolean και όχι η λέξη "true", ελέγξτε την έξοδο πριν την στείλετε.
Το YAML νοιάζεται για τα κενά. Η εσοχή δεν είναι διακοσμητική στο YAML, είναι δομική. Ένα περιττό κενό μπορεί να αλλάξει σε ποιο κλειδί ανήκει μια τιμή, και τα tabs απαγορεύονται εντελώς. Μετά από κάθε μετατροπή JSON σε YAML, αξίζει μια γρήγορη ματιά, ή περάστε το αποτέλεσμα ξανά από έναν μορφοποιητή JSON για να επιβεβαιώσετε ότι η δομή επέζησε.
Το XML και το JSON δεν αντιστοιχίζονται καθαρά. Το JSON έχει πίνακες· το XML έχει επαναλαμβανόμενα στοιχεία. Το JSON δεν έχει χαρακτηριστικά (attributes) πουθενά· το XML τα έχει παντού. Οι περισσότεροι μετατροπείς επιλέγουν μια λογική σύμβαση, αλλά αν το XML σας χρησιμοποιεί χαρακτηριστικά έντονα, το JSON που παράγει θα φαίνεται λίγο διαφορετικό από χειρόγραφο JSON. Αυτό είναι αναμενόμενο, όχι σφάλμα.
Το βάθος φωλιάσματος έχει σημασία. Το CSV είναι επίπεδο, οπότε βαθιά ένθετο JSON δεν μπορεί πάντα να συμπτυχθεί σε στήλες χωρίς να ισοπεδώσει κλειδιά (σκεφτείτε το address.city). Στην αντίθετη κατεύθυνση, ένα επίπεδο CSV γίνεται επίπεδος πίνακας, ποτέ δέντρο.

Γιατί έχει σημασία εδώ το αποκλειστικά τοπικό
Πολλά δεδομένα που θα θελήσετε να μετατρέψετε δεν είναι δικά σας για να τα μοιραστείτε. Εγγραφές χρηστών, εσωτερικές ρυθμίσεις, κλειδιά API θαμμένα σε μια απάντηση, οικονομικές γραμμές. Αρκετοί online μετατροπείς στέλνουν σιωπηλά αυτό που επικολλάτε σε διακομιστή για να κάνουν τη δουλειά. Το Speedor δεν το κάνει. Η λογική μετατροπής τρέχει στην καρτέλα του προγράμματος περιήγησής σας, τα δεδομένα δεν διασχίζουν ποτέ το δίκτυο, και το κλείσιμο της καρτέλας είναι όλος ο καθαρισμός που υπάρχει. Είναι επίσης πιο γρήγορο, αφού δεν υπάρχει ταξίδι ανεβάσματος, και λειτουργεί εκτός σύνδεσης μόλις φορτώσει η σελίδα. Δωρεάν, χωρίς εγγραφή, χωρίς όριο.
Συχνές ερωτήσεις
Ανεβαίνουν τα δεδομένα μου κάπου όταν τα μετατρέπω;
Όχι. Κάθε μετατροπή τρέχει τοπικά στο πρόγραμμα περιήγησής σας χρησιμοποιώντας JavaScript. Τα δεδομένα σας δεν φεύγουν ποτέ από τη συσκευή σας και δεν στέλνονται ποτέ σε διακομιστή, γι' αυτό αυτά τα εργαλεία λειτουργούν ακόμη κι όταν είστε εκτός σύνδεσης.
Μπορώ να μετατρέψω CSV σε JSON χωρίς να γράψω κώδικα;
Ναι. Επικολλήστε το CSV σας στον μετατροπέα, κάντε κλικ στη μετατροπή, και αντιγράψτε τον προκύπτοντα πίνακα JSON. Η πρώτη γραμμή αντιμετωπίζεται ως οι επικεφαλίδες στηλών, οι οποίες γίνονται τα κλειδιά για κάθε αντικείμενο.
Γιατί το μετατρεμμένο JSON μου δείχνει αριθμούς ως strings;
Το CSV δεν έχει έννοια τύπων δεδομένων, οπότε κάθε τιμή ξεκινά ως κείμενο. Κάποιοι μετατροπείς προσπαθούν να ανιχνεύσουν αυτόματα αριθμούς και boolean, αλλά όταν υπάρχει αμφιβολία κρατούν τις τιμές ως strings για να αποφύγουν να χαλάσουν πράγματα όπως ταχυδρομικούς κώδικες ή αναγνωριστικά με μηδενικά στην αρχή.
Ποια είναι η διαφορά ανάμεσα στο JSON και το YAML;
Αναπαριστούν τα ίδια είδη δεδομένων, αλλά το YAML χρησιμοποιεί εσοχή αντί για άγκιστρα και αγκύλες, επιτρέπει σχόλια, και είναι γενικά πιο εύκολο για τους ανθρώπους να το διαβάσουν και να το επεξεργαστούν. Το JSON είναι πιο συμπαγές και είναι η προεπιλογή για τα περισσότερα web API.
Είναι η μετατροπή ανάμεσα σε αυτές τις μορφές πάντα χωρίς απώλειες;
Συνήθως, αλλά όχι πάντα. Το JSON, το YAML, και το XML αντιστοιχίζονται καλά μεταξύ τους στις περισσότερες περιπτώσεις. Οι πιο δύσκολοι συνδυασμοί είναι το CSV, που είναι επίπεδο και χωρίς τύπους, και το XML, που χειρίζεται χαρακτηριστικά και επαναλαμβανόμενα στοιχεία διαφορετικά από τους πίνακες JSON. Πάντα ελέγχετε την έξοδο για σημαντικά δεδομένα.
Δουλεύουν αυτοί οι μετατροπείς με μεγάλα αρχεία;
Χειρίζονται τα περισσότερα καθημερινά αρχεία άνετα αφού η δουλειά γίνεται στη δική σας συσκευή. Η απόδοση εξαρτάται από τη συσκευή σας παρά από διακομιστή, οπότε πολύ μεγάλα αρχεία περιορίζονται κυρίως από τη μνήμη του προγράμματος περιήγησής σας.
