DataSwap Γρήγοροι μετατροπείς αρχείων και δεδομένων, χωρίς εγγραφή

Μετατροπέας YAML σε JSON

Επικολλήστε YAML σε στυλ μπλοκ παρακάτω για να πάρετε JSON — υποστηρίζονται ένθετες αντιστοιχίσεις, λίστες και scalar τιμές· το στυλ ροής {a: 1} / [1, 2, 3], οι άγκυρες και τα αρχεία πολλαπλών εγγράφων όχι (δείτε τις συχνές ερωτήσεις για τον λόγο). Τίποτα από όσα επικολλάτε δεν ανεβαίνει πουθενά — η μετατροπή γίνεται εξ ολοκλήρου στο πρόγραμμα περιήγησής σας.

Ένας μετατροπέας ειλικρινής για όσα δεν κάνει

Το πλήρες YAML 1.2 είναι μια μεγάλη προδιαγραφή — ενσωματωμένες συλλογές σε στυλ ροής, άγκυρες και ψευδώνυμα, ροές πολλαπλών εγγράφων, πολυγραμμικά scalar μπλοκ, και άλλα. Η υλοποίηση όλων αυτών ρισκάρει το μόνο πράγμα που ένα εργαλείο μετατροπής δεν θα έπρεπε ποτέ να κάνει: να παράγει σιωπηλά λάθος έξοδο που δεν προσέχετε μέχρι να χαλάσει κάτι παρακάτω. Γι' αυτό αυτό το εργαλείο υποστηρίζει σκόπιμα μόνο το υποσύνολο σε στυλ μπλοκ που καλύπτει τη συντριπτική πλειοψηφία της χειρόγραφης διαμόρφωσης — ένθετες αντιστοιχίσεις κλειδί: τιμή, λίστες με πρόθεμα - (με εσοχή κάτω από το κλειδί τους ή στο ίδιο επίπεδο εσοχής — και οι δύο μορφές είναι έγκυρο YAML), και απλές ή σε εισαγωγικά scalar τιμές. Αν η είσοδός σας χρησιμοποιεί στυλ ροής {a: 1} / [1, 2, 3], μια άγκυρα (&όνομα), ένα ψευδώνυμο (*όνομα), ένα διαχωριστικό πολλαπλών εγγράφων ---, ή ένα scalar μπλοκ |/>, θα λάβετε ένα σαφές σφάλμα που αναφέρει τη γραμμή και το χαρακτηριστικό — ποτέ μια σιωπηλά χαλασμένη μετατροπή.

Πρακτικό παράδειγμα

Είσοδος:

name: Alice
age: 30
active: true
tags:
  - a
  - b
address:
  city: Rome
  zip: "00100"

μετατρέπεται σε:

{
  "name": "Alice",
  "age": 30,
  "active": true,
  "tags": ["a", "b"],
  "address": {
    "city": "Rome",
    "zip": "00100"
  }
}

Παρατηρήστε ότι το age γίνεται ο αριθμός 30 επειδή γράφτηκε χωρίς εισαγωγικά, ενώ το zip παραμένει η συμβολοσειρά "00100" επειδή ήταν σε εισαγωγικά στην πηγή — τα εισαγωγικά είναι ακριβώς αυτό που λέει σε αυτόν τον αναλυτή (και στο ίδιο το YAML) ότι μια τιμή με αριθμητική εμφάνιση είναι κείμενο, όχι αριθμός.

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

Ποιο υποσύνολο του YAML υποστηρίζει πραγματικά αυτό το εργαλείο;

Ένθετες αντιστοιχίσεις μπλοκ (ένα κλειδί ακολουθούμενο από γραμμές κλειδί: τιμή με εσοχή), λίστες μπλοκ (στοιχεία - , είτε σε ανώτατο επίπεδο είτε ως τιμή ενός κλειδιού, με εσοχή κάτω από το κλειδί ή στο ίδιο επίπεδο εσοχής — και οι δύο μορφές είναι έγκυρο YAML), απλές τιμές scalar ή σε εισαγωγικά (συμβολοσειρές, ακέραιοι, δεκαδικοί, true/false, null/~), και σχόλια που ξεκινούν με # (ένα # μέσα σε συμβολοσειρά με εισαγωγικά παραμένει ανέγγιχτο). Αυτό καλύπτει τη συντριπτική πλειοψηφία των χειρόγραφων αρχείων ρυθμίσεων — manifests Kubernetes, docker-compose.yml, ροές εργασίας GitHub Actions, ρυθμίσεις εφαρμογών — χωρίς να προσποιείται ότι υλοποιεί ολόκληρη την προδιαγραφή YAML 1.2.

Ποια χαρακτηριστικά YAML ΔΕΝ υποστηρίζονται, και τι συμβαίνει αν επικολλήσω ένα;

Η σύνταξη σε στυλ ροής (αντικείμενα {a: 1} ή πίνακες [1, 2, 3] σε μία γραμμή), οι άγκυρες (&όνομα) και τα ψευδώνυμα (*όνομα), τα αρχεία πολλαπλών εγγράφων (διαχωριστικά ---), τα πολυγραμμικά scalar μπλοκ (| και >), και τα κλειδιά αντιστοίχισης που δεν είναι κείμενο μένουν όλα ρητά εκτός εύρους. Αντί να μαντεύει και να ρισκάρει να παράγει σιωπηλά λάθος JSON, αυτό το εργαλείο εντοπίζει αυτές τις κατασκευές και εμφανίζει ένα σαφές σφάλμα που αναφέρει τη γραμμή και το μη υποστηριζόμενο χαρακτηριστικό, ώστε να ξέρετε ακριβώς τι να ξαναγράψετε αντί να λάβετε χαλασμένη έξοδο που ίσως δεν προσέξετε.

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

Η πλήρης υποστήριξη του YAML (άγκυρες, ψευδώνυμα, συλλογές ροής, ροές πολλαπλών εγγράφων) είναι πραγματικά περίπλοκη για να υλοποιηθεί σωστά, και ένας μετατροπέας που κάνει λάθος με λεπτό τρόπο είναι χειρότερος από έναν που είναι ειλικρινής για τα όριά του — ένα σιωπηλό σφάλμα στη μετατροπή ενός αρχείου ρυθμίσεων μπορεί να είναι πολύ δύσκολο να εντοπιστεί. Αν το συναντήσετε αυτό, η διόρθωση είναι συνήθως μηχανική: ξαναγράψτε το {a: 1, b: 2} ως δύο γραμμές κλειδί: τιμή με εσοχή, ή το [1, 2, 3] ως τρεις γραμμές - στοιχείο, και ξανατρέξτε τη μετατροπή.

Πώς αντιμετωπίζεται μια τιμή όπως "00100" που μοιάζει με αριθμό;

Ακριβώς όπως θα το έκανε το ίδιο το YAML: αν η τιμή γράφτηκε σε εισαγωγικά στην πηγή σας ("00100"), διατηρείται ως η συμβολοσειρά "00100" — τα εισαγωγικά είναι ακριβώς αυτό που λέει στο YAML (και σε αυτόν τον αναλυτή) ότι πρόκειται για κείμενο, όχι αριθμό. Αν η ίδια τιμή είχε γραφτεί χωρίς εισαγωγικά ως 00100, θα μετατρεπόταν στον αριθμό 100, γιατί στο απλό YAML δεν υπάρχει τίποτα που να διακρίνει μια συμβολοσειρά με αριθμητική εμφάνιση από έναν πραγματικό αριθμό χωρίς τη χρήση εισαγωγικών.

Ανεβαίνει το YAML μου κάπου;

Όχι. Η ανάλυση γίνεται εξ ολοκλήρου στο πρόγραμμα περιήγησής σας με έναν μικρό, χειρόγραφο αναλυτή — τίποτα από όσα επικολλάτε δεν στέλνεται, δεν αποθηκεύεται και δεν καταγράφεται πουθενά. Ισχύει ο ίδιος κανόνας για κάθε εργαλείο αυτού του site.

Επικυρώνει αυτό το εργαλείο ότι το YAML μου είναι σωστά διαμορφωμένο;

Ελέγχει τη δομή που κατανοεί — συνεπή εσοχή, ταιριασμένα εισαγωγικά και αναγνωρίσιμες γραμμές κλειδί: τιμή / - στοιχείο — και αναφέρει έναν αριθμό γραμμής όταν κάτι δεν αναλύεται. Δεν είναι πλήρης επικυρωτής YAML 1.2, αφού υλοποιεί μόνο το υποσύνολο σε στυλ μπλοκ που περιγράφεται παραπάνω· ένα αρχείο που είναι έγκυρο YAML αλλά χρησιμοποιεί ένα μη υποστηριζόμενο χαρακτηριστικό θα απορριφθεί με μια εξήγηση, αντί να γίνει σιωπηλά αποδεκτό ή να αναλυθεί λάθος.