Μετατροπή μεταξύ JSON και YAML

μετατρέπει JSON σε YAML (και αντίστροφα) διατηρώντας τη δομή, με ρυθμιζόμενη εσοχή. Πρακτικό για μετεγκατάσταση διαμόρφωσης μεταξύ αρχείων .json και .yaml

Σε τι χρησιμεύει αυτός ο μετατροπέας JSON / YAML;

Αυτό το εργαλείο μετατρέπει ένα έγγραφο YAML σε JSON και αντίστροφα, διατηρώντας τη δομή δεδομένων (αντικείμενα, πίνακες, βαθμωτούς τύπους). Η μετατροπή JSON σε YAML ή YAML σε JSON, είναι μια συνηθισμένη λειτουργία στην ανάπτυξη: δημιουργούμε ένα αρχείο OpenAPI YAML από μια προδιαγραφή JSON, μετατρέπουμε την έξοδο ενός REST API σε YAML για να το δεσμεύσουμε σε ένα αποθετήριο διαμόρφωσης, μεταφράζουμε ένα μανιφέστο Kubernetes YAML σε JSON για να το μεταβιβάσουμε στο ή ευθυγραμμίζουμε μια ροή εργασίας GitHub με ένα σχήμα JSON. Ευρύτερα, είναι η γέφυρα μεταξύ του κόσμου της ανταλλαγής δεδομένων (JSON) και του κόσμου της χειροκίνητης επεξεργάσιμης διαμόρφωσης (YAML).

YAML εναντίον JSON: Σύγκριση πρόσωπο με πρόσωπο

Το JSON και το YAML αντιμετωπίζουν παρόμοιες ανάγκες αλλά διαφορετικές περιπτώσεις χρήσης. Ο παρακάτω πίνακας συνοψίζει τις κύριες τεχνικές διαφορές, χρήσιμες για την επιλογή μεταξύ των δύο ανάλογα με το πλαίσιο.

<κεφάλι>
Κριτήριο JSON YAML
Αναγνωσιμότητα από τον άνθρωπο Μέσος όρος (αγκύλες, εισαγωγικά παντού) Ισχυρή (εσοχή, μικρή στίξη)
Λιξισμός Περισσότερο λόγια Πιο συνοπτικό
Σχόλια Δεν υποστηρίζεται Υποστηρίζεται (# σχόλιο)
Πολλαπλά έγγραφα σε ένα μόνο αρχείο Όχι Ναι, μέσω του διαχωριστικού ---
Άγκυρες και ψευδώνυμα (επαναχρησιμοποίηση) Όχι Ναι (&anchor και *anchor)
Πληκτρολογήστε σύστημα Αυστηρή (συμβολοσειρά, αριθμός, bool, null, πίνακας, αντικείμενο) Σιωπηρός εξαναγκασμός (ναι, όχι, null, ημερομηνίες, ερμηνευμένοι βαθμοί)
Απόδοση ανάλυσης Πολύ γρήγοροι, εγγενείς αναλυτές παντού Πιο αργή, πολύ ευρύτερη γραμματική
Έγκριση για REST API De facto standard Σπάνιο
Έγκριση για διαμόρφωση Σπάνια (εκτός από package.json, tsconfig.json) De facto standard (Kubernetes, CI/CD, Ansible)

Πότε να χρησιμοποιήσετε το JSON;

Το JSON απαιτείται κάθε φορά που ένα πρόγραμμα συνομιλεί με άλλο πρόγραμμα. Οι τυπικές περιπτώσεις χρήσης του:

  • REST και GraphQL API: ωφέλιμα φορτία αιτημάτων και απαντήσεων.
  • Ανταλλαγή δεδομένων μεταξύ μικροϋπηρεσιών και ουρών μηνυμάτων.
  • Εγγενής κώδικας JavaScript: JSON.parse και JSON.stringify χωρίς εξαρτήσεις.
  • Αποθήκευση από την πλευρά του προγράμματος περιήγησης: localStorage, sessionStorage, IndexedDB.
  • Αιτήματα AJAX και ανάκτηση.
  • Δυαδικές ή προσανατολισμένες στη ροή παραλλαγές: BSON (MongoDB), JSON Lines (καταγραφή, σύνολα δεδομένων ML), MessagePack.
  • Διαμόρφωση εργαλείων JS / TS: package.json, tsconfig.json, composer.json.

Πότε να χρησιμοποιήσετε το YAML;

Το YAML απαιτείται μόλις ένας άνθρωπος επεξεργάζεται τακτικά το αρχείο. Οι τυπικές περιπτώσεις χρήσης του:

  • Σύνθεση Docker (docker-compose.yml) και στοίβα προφίλ.
  • Εκδηλώσεις Kubernetes (Διαγράμματα Ανάπτυξης, Εξυπηρέτησης, Εισόδου, Πηγώνων).
  • Ανώμαλα βιβλία και αποθέματα.
  • Σωληνώσεις CI/CD: GitHub Actions, GitLab CI, CircleCI, Bitbucket Pipelines.
  • Προδιαγραφές OpenAPI / Swagger και AsyncAPI.
  • Διαμόρφωση εφαρμογής με σχολιασμό (Symfony, Spring Boot, Rails) όπου τα σχόλια είναι χρήσιμα.
  • Αρχεία που επεξεργάζονται συχνά με το χέρι, όπου η συνοπτικότητα και η αναγνωσιμότητα έχουν προτεραιότητα έναντι της ταχύτητας ανάλυσης.

Κοινές παγίδες στο YAML

Το YAML είναι πιο ανεκτικό από το JSON, καθιστώντας το μια ισχυρή αλλά ύπουλη μορφή. Οι πιο συνηθισμένες παγίδες:

  • Εσοχή: οι καρτέλες απαγορεύονται από την προδιαγραφή, ισχύουν μόνο κενά. Η ανάμειξη των δύο ή η αλλαγή του αριθμού των διαστημάτων στο ίδιο μπλοκ διακόπτει την ανάλυση.
  • Αυτόματος κλιμακωτός εξαναγκασμός: ναι, όχι, ενεργό, off, true, false, null, είναι αναλύεται ως booleans ή ως μηδενικό. Παράδειγμα παγίδας: ένας ταχυδρομικός κώδικας χωρίς εισαγωγικό 01234 γίνεται ακέραιος 1234 και ένα όνομα χώρας NO (Νορβηγία) γίνεται false. Να εσωκλείετε πάντα διφορούμενες συμβολοσειρές σε εισαγωγικά.
  • Συμβολοσειρές πολλαπλών γραμμών: | (κυριολεκτική μπλοκ) διατηρεί τις αλλαγές γραμμής ως έχουν, ενώ το > (διπλωμένο) αντικαθιστά τις αλλαγές γραμμής με κενά. Οι σημαίες chomping - και + προσαρμόζουν τη συμπεριφορά στο τελικό άλμα.
  • YAML 1.1 έναντι 1.2: Το 1.1 (ακόμα πολύ συνηθισμένο, για παράδειγμα μέσω PyYAML από προεπιλογή) αντιμετωπίζει το yes/no/on/off ως booleans, το οποίο αφαιρέθηκε από το 1.2. Οι συμπεριφορές διαφέρουν επίσης με βάση τους αριθμούς 8.
  • Υποδηλωμένες ημερομηνίες: Το 2024-01-15 χωρίς εισαγωγικά ερμηνεύεται ως αντικείμενο ημερομηνίας από ορισμένους αναλυτές και όχι ως συμβολοσειρά.

Παραδείγματα δίπλα-δίπλα

Το ίδιο έγγραφο, εκφρασμένο σε JSON και στη συνέχεια σε YAML. Απλή διαμόρφωση μιας εφαρμογής με τις εξαρτήσεις και το περιβάλλον της:

Έκδοση JSON

{
    "name": "cdrn-app",
    "έκδοση": "1.14.2",
    "περιβάλλον": "παραγωγή",
    "εξαρτήσεις": {
        "php": "^8.3",
        "symfony/framework-bundle": "^7.0",
        "doctrine/orm": "^3.0"
    },
    "features": ["cache", "mailer", "queue"],
    "debug": ψευδής
}

Ισοδύναμη έκδοση YAML

# Διαμόρφωση εφαρμογής
Όνομα: cdrn-app
έκδοση: 1.14.2
περιβάλλον: παραγωγή
εξαρτήσεις:
    php: '^8.3'
    symfony/framework-bundle: '^7.0'
    δόγμα/ορμ: '^3.0'
χαρακτηριστικά:
    - προσωρινή μνήμη
    - ταχυδρόμος
    - ουρά
εντοπισμός σφαλμάτων: false

Η έκδοση YAML είναι περίπου 25% μικρότερη σε χαρακτήρες, δέχεται ένα βασικό σχόλιο και διαβάζεται σαν μια λίστα ιδιοτήτων χωρίς συντακτικό θόρυβο.

Πώς να χρησιμοποιήσετε τον μετατροπέα

Βήματα για τη μετατροπή των δεδομένων σας:

  1. Επικολλήστε το έγγραφο προέλευσης (JSON ή YAML) στο πεδίο εισαγωγής.
  2. Επιλέξτε την επιθυμητή κατεύθυνση μετατροπής (JSON σε YAML ή YAML σε JSON).
  3. Κάντε κλικ στο κουμπί μετατροπής: το μορφοποιημένο αποτέλεσμα εμφανίζεται στην περιοχή εξόδου.
  4. Ελέγξτε την απόδοση και, στη συνέχεια, χρησιμοποιήστε το κουμπί αντιγραφής για να ανακτήσετε το αποτέλεσμα στο πρόχειρό σας.

Η μετατροπή πραγματοποιείται τοπικά στο πρόγραμμα περιήγησής σας ή μέσω μιας αποκλειστικής διαδρομής διακομιστή ανάλογα με το εργαλείο: δεν διατηρούνται ευαίσθητα δεδομένα.

Συχνές ερωτήσεις

JSON ή YAML για τα αρχεία διαμόρφωσής μου;

Εάν το οικοσύστημα επιβάλλει μια μορφή (Kubernetes σε YAML, package.json σε JSON), ακολουθήστε τη σύμβαση. Διαφορετικά, προτιμήστε το YAML για μεγάλες, σχολιασμένες διαμορφώσεις που επεξεργάζεστε με το χέρι και το JSON για διαμορφώσεις που δημιουργούνται από ένα πρόγραμμα ή καταναλώνονται από κώδικα. Η παρουσία χρήσιμων σχολίων είναι συχνά το αποφασιστικό επιχείρημα υπέρ του YAML.

Πώς να διατηρείτε σχόλια κατά τη διάρκεια ενός ταξιδιού YAML προς JSON προς YAML μετ' επιστροφής;

Δεν μπορείς. Το JSON δεν υποστηρίζει σχόλια: μόλις μετατρέψετε το YAML σε JSON, τα σχόλια χάνονται οριστικά. Για να διατηρήσετε τα σχόλια κατά την επεξεργασία μέσω προγραμματισμού, χρησιμοποιήστε έναν αναλυτή που διατηρεί τη μορφοποίηση, όπως ruamel.yaml στην Python σε λειτουργία μετ' επιστροφής ή αποφύγετε τη χρήση JSON εντελώς.

Γιατί το αρχείο μου YAML αναλύεται σωστά τοπικά αλλά αποτυγχάνει στην παραγωγή;

Συνήθεις αιτίες: διαφορετικές εκδόσεις αναλυτής (YAML 1.1 έναντι 1.2), καρτέλες που εισάγονται από ένα πρόγραμμα επεξεργασίας, τιμές χωρίς εισαγωγικά που μοιάζουν με booleans (NO, off) ή αριθμοί (01234), κωδικοποίηση αρχείων (UTF-8 BOM με κακή απόδοση). Αναφέρετε συστηματικά διφορούμενες συμβολοσειρές και ορίστε την έκδοση ανάλυσης στο έργο σας.

Είναι το JSON υποσύνολο του YAML;

Από το YAML 1.2, ναι στην πράξη: οποιοδήποτε έγκυρο έγγραφο JSON είναι έγκυρο έγγραφο YAML 1.2. Το αντίθετο είναι λάθος: ένα έγγραφο YAML που χρησιμοποιεί σχόλια, αγκυρώσεις, σιωπηρές ημερομηνίες ή πολλά έγγραφα σε ένα αρχείο δεν μπορεί να εκφραστεί απευθείας σε JSON χωρίς απώλεια πληροφοριών.

Ποιες εναλλακτικές λύσεις για το JSON και το YAML πρέπει να γνωρίζετε;

TOML: δημοφιλές για διαμόρφωση (Cargo, pyproject.toml), καλός συμβιβασμός μεταξύ αναγνωσιμότητας και ρητής πληκτρολόγησης. INI: πολύ απλή, αλλά χωρίς τυπική ένθετη δομή. XML: περιεκτικό, αλλά εξακολουθεί να είναι σχετικό για το SOAP και ορισμένες παραμέτρους Java παλαιού τύπου. HCL: χρησιμοποιείται από την Terraform. JSON5 και JSONC: Επεκτάσεις JSON που επιτρέπουν σχόλια και κόμματα στο τέλος.

Ποιο είναι το βάρος του YAML έναντι του JSON;

Για ισοδύναμη δομή, το YAML είναι γενικά 15 έως 30% μικρότερο σε byte, χάρη στην απουσία εισαγωγικών γύρω από τα κλειδιά και τις περισσότερες συμβολοσειρές και την απουσία αγκύλων. Στο καλώδιο (μεταφορά HTTP), το ελαχιστοποιημένο JSON παραμένει συγκρίσιμο, αλλά το YAML παραμένει πιο συμπαγές σε αναγνώσιμη έκδοση. Για καθαρή απόδοση από την πλευρά της ανάλυσης, το JSON είναι αρκετές φορές πιο γρήγορο, γεγονός που δικαιολογεί τη χρήση του για API υψηλής επισκεψιμότητας.

Παράδειγμα αιτήματος

curl -X POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute \
  -H "Content-Type: application/json" \
  -d '{"json":"...","space_tabulation":1}'

Σχήμα εισόδου

Πεδίο Τύπος Απαιτείται Προεπιλογή
json text
space_tabulation integer

Σημεία πρόσβασης

  • GET https://cdrn.fr/api/v1/tools - εμφανίζει όλα τα διαθέσιμα εργαλεία
  • GET https://cdrn.fr/api/v1/tools/json-yaml-converter - ανακτά το σχήμα αυτού του εργαλείου
  • POST https://cdrn.fr/api/v1/tools/json-yaml-converter/execute - εκτελεί αυτό το εργαλείο με payload JSON

CDRN - δημιουργήθηκε από ARDNTECH