Μετατρέψτε JSON σε YAML και YAML σε JSON στον browser σας
Το JSON και το YAML περιγράφουν το ίδιο είδος δεδομένων — ένθετους χάρτες, λίστες, strings, αριθμούς και booleans — αλλά φαίνονται πολύ διαφορετικά και χρησιμοποιούνται σε διαφορετικά μέρη. Αν περνάτε χρόνο κοντά σε API, αρχεία container, ή pipeline CI, τελικά χρειάζεται να μετατρέψετε το ένα στο άλλο. Αυτή η σελίδα κάνει αυτή τη μετατροπή και προς τις δύο κατευθύνσεις, εξ ολοκλήρου μέσα στον browser σας, ώστε τα δεδομένα που επικολλάτε να μην εγκαταλείπουν ποτέ το μηχάνημά σας.

Τι είναι το JSON και πού ζει
Το JSON (JavaScript Object Notation) είναι μια αυστηρή μορφή με αγκύλες και άγκιστρα, χτισμένη κατά πρώτο λόγο για μηχανές. Κάθε αντικείμενο τυλίγεται σε {}, κάθε πίνακας σε [], τα κλειδιά και οι τιμές string είναι σε διπλά εισαγωγικά, και τα στοιχεία διαχωρίζονται με κόμματα. Είναι η προεπιλεγμένη μορφή μεταφοράς για REST και GraphQL API, το σώμα των περισσότερων webhooks, το σχήμα των εγγράφων NoSQL, και αυτό που επιστρέφει η κλήση fetch σας. Σχεδόν κάθε γλώσσα το αναλύει εξ ορισμού, γι' αυτό ακριβώς κέρδισε το επίπεδο των API: JSON.parse στη JavaScript, json στην τυπική βιβλιοθήκη Python, και ισοδύναμα παντού αλλού. Το μειονέκτημα είναι ότι το JSON είναι φλύαρο για χειρόγραφη συγγραφή και απαγορεύει σχόλια, οπότε είναι κακή μορφή για αρχεία που ένας άνθρωπος επεξεργάζεται όλη μέρα.
Τι είναι το YAML και πού ζει
Το YAML (YAML Ain't Markup Language) σχεδιάστηκε για την αντίθετη προτεραιότητα: ανθρώπους πρώτα. Αφαιρεί τα άγκιστρα και τα εισαγωγικά, χρησιμοποιεί εσοχές για να εκφράσει την ένθεση, και σας επιτρέπει να γράφετε σχόλια με #. Αυτή η αναγνωσιμότητα είναι ο λόγος που έγινε η κοινή γλώσσα της διαμόρφωσης. Τα αρχεία Docker Compose, τα manifest Kubernetes, οι ροές εργασίας GitHub Actions και GitLab CI, τα playbook Ansible, και αμέτρητα αρχεία διαμόρφωσης εφαρμογών είναι όλα YAML. Ένα τυπικό έγγραφο YAML είναι αισθητά συντομότερο από το αντίστοιχο JSON και πολύ ευκολότερο να συγκριθεί σε ένα pull request. Το κόστος αυτής της κομψότητας είναι η ευθραυστότητα, εκεί όπου η μετατροπή γίνεται ενδιαφέρουσα.
Οι βασικές διαφορές που έχουν σημασία
Τρεις διαφορές οδηγούν σχεδόν κάθε απόφαση μετατροπής. Πρώτον, το κενό διάστημα είναι σημαντικό στο YAML και ασήμαντο στο JSON. Το YAML χρησιμοποιεί κενά — ποτέ tab — για να δηλώσει δομή, οπότε ένα μόνο κενό εκτός θέσης μπορεί να αλλάξει σιωπηλά το νόημα ενός εγγράφου. Το JSON δεν νοιάζεται καθόλου για τις εσοχές. Δεύτερον, το YAML υποστηρίζει σχόλια και το JSON όχι. Οποιοδήποτε σχόλιο # στο YAML απλώς εξαφανίζεται όταν παράγετε JSON, επειδή δεν υπάρχει πού να το βάλετε. Τρίτον, το YAML έχει πλουσιότερη, σιωπηρή τυποποίηση. Διαβάζει με ευχαρίστηση ημερομηνίες, χρονοσφραγίδες, και null με πολλές γραφές, και μαντεύει τύπους από τιμές χωρίς εισαγωγικά. Το JSON έχει ένα μικρό, ρητό σύνολο τύπων και καμία ασάφεια. Σημειώστε επίσης ότι το JSON είναι τεχνικά υποσύνολο του YAML 1.2, γι' αυτό το έγκυρο JSON συνήθως αναλύεται καθαρά ως YAML, αλλά το αντίστροφο δεν είναι εγγυημένο.

Παγίδες μετατροπής που πρέπει να προσέχετε
Η διαδρομή μετ' επιστροφής δεν είναι πάντα χωρίς απώλειες, και αξίζει να γνωρίζετε πού συμβαίνουν προβλήματα:
- Το πρόβλημα της Νορβηγίας. Κάτω από τους κανόνες YAML 1.1, το χωρίς εισαγωγικά
NOαναλύεται ως η boolean τιμήfalse, και ταyes,on, καιoffγίνονται επίσης booleans. Ένας κωδικός χώρας ή μια ετικέτα διακόπτη μπορεί να γυρίσει σεtrue/falseπριν το προσέξετε. Βάλτε σε εισαγωγικά τιμές που εννοείτε ως strings. - Μετατροπή αριθμών. Μια έκδοση όπως
3.10μπορεί να χάσει το τελικό της μηδενικό και να γίνει3.1, και το1.0γίνεται αριθμός ακόμα κι όταν θέλατε κείμενο. Βάλτε σε εισαγωγικά strings έκδοσης και αναγνωριστικά. - Οι άγκυρες και τα ψευδώνυμα εξαφανίζονται. Οι αναφορές
&anchorκαι*aliasτου YAML δεν έχουν ισοδύναμο στο JSON. Ένας καλός μετατροπέας τις επεκτείνει στην πλήρη τιμή τους, οπότε τα δεδομένα είναι σωστά αλλά η αποφυγή διπλότυπων χάνεται — JSON σε YAML σε JSON δεν θα ανακατασκευάσει τις αρχικές άγκυρες. - Σχόλια και block scalars. Τα σχόλια αφαιρούνται πηγαίνοντας προς JSON. Τα πολύγραμμα block scalars (
|και>) καταρρέουν σε συνηθισμένα strings JSON με escape χαρακτήρες\n, οπότε η οπτική πρόθεση μορφοποίησης χάνεται. - Εσοχή όταν επιστρέφετε σε YAML. Το JSON δεν κωδικοποιεί εσοχή, οπότε ο μετατροπέας επιλέγει ένα συνεπές στιλ. Ελέγξτε το πριν το επικολλήσετε σε ένα εργαλείο ευαίσθητο σε tab.
Γιατί έχει σημασία η αποκλειστικά τοπική επεξεργασία
Τα αρχεία διαμόρφωσης και τα payload API είναι ακριβώς το είδος πράγματος που δεν θα έπρεπε να ανεβαίνει σε τυχαίο server: συχνά μεταφέρουν ονόματα κεντρικών υπολογιστών, tokens, ονόματα εσωτερικών υπηρεσιών, ή δεδομένα πελατών. Αυτός ο μετατροπέας εκτελεί το βήμα ανάλυσης και παραγωγής στον browser σας με JavaScript. Τίποτα δεν αποστέλλεται σε backend, τίποτα δεν καταγράφεται, και το εργαλείο λειτουργεί χωρίς σύνδεση μόλις φορτωθεί η σελίδα. Επικολλήστε ένα μυστικό Kubernetes ή μια ροή εργασίας CI με σιγουριά ότι παραμένει στο μηχάνημά σας.
Χρειάζεστε σχετικά εργαλεία; Περιηγηθείτε στο πλήρες σύνολο εργαλείων μετατροπής δεδομένων, καθαρίστε ακατάστατη είσοδο με τον μορφοποιητή JSON, και επιστρέψτε εδώ όποτε χρειάζεται να κινηθείτε ανάμεσα στον κόσμο των API και τον κόσμο της διαμόρφωσης.
Συχνές ερωτήσεις
Ανεβαίνουν τα δεδομένα μου κάπου;
Όχι. Η μετατροπή γίνεται εξ ολοκλήρου στον browser σας χρησιμοποιώντας τοπική JavaScript. Το JSON ή το YAML σας δεν αποστέλλεται ποτέ σε server, οπότε τα μυστικά και τα αρχεία διαμόρφωσης παραμένουν ιδιωτικά.
Γιατί η τιμή true ή false στο YAML μου άλλαξε απροσδόκητα;
Το YAML 1.1 αντιμετωπίζει λέξεις χωρίς εισαγωγικά όπως yes, no, on, και off ως booleans — το πρόβλημα της Νορβηγίας. Τυλίξτε οποιαδήποτε τιμή εννοείτε ως string σε εισαγωγικά ώστε να επιβιώσει τη μετατροπή ως κείμενο.
Τι συμβαίνει στα σχόλιά μου όταν μετατρέπω YAML σε JSON;
Το JSON δεν έχει σύνταξη σχολίων, οπότε όλα τα σχόλια με δίεση αφαιρούνται κατά τη μετατροπή. Αν χρειάζεται να διατηρήσετε σημειώσεις, κρατήστε το επίσημο αντίγραφό σας σε YAML.
Διατηρούνται οι άγκυρες και τα ψευδώνυμα YAML;
Επεκτείνονται στις πλήρεις τιμές τους επειδή το JSON δεν έχει μηχανισμό αναφοράς. Τα δεδομένα παραμένουν σωστά, αλλά η αποφυγή διπλότυπων δεν είναι ανακτήσιμη όταν μετατρέπετε πίσω σε YAML.
Μπορώ να μετατρέψω JSON σε YAML όσο και YAML σε JSON;
Ναι, το εργαλείο λειτουργεί και προς τις δύο κατευθύνσεις. Επικολλήστε JSON για να πάρετε YAML, ή επικολλήστε YAML για να πάρετε JSON, και ο μετατροπέας ανιχνεύει και παράγει την άλλη μορφή.
Γιατί χαλάει το YAML όταν χρησιμοποιώ tab;
Το YAML απαιτεί κενά για εσοχή και απορρίπτει τα tab. Αν μια επικόλληση αποτύχει να αναλυθεί, αντικαταστήστε τους χαρακτήρες tab με κενά και κρατήστε συνεπή εσοχή.
