JSON formatter και validator

Acrafto Team Προγραμματιστές
Ενημερώθηκε
Αναμονή για δεδομένα. Επικολλήστε JSON παραπάνω ή σύρετε εδώ ένα αρχείο .json.

Επικολλήστε οποιοδήποτε JSON στο παραπάνω πεδίο και αυτός ο JSON formatter και validator το ελέγχει καθώς πληκτρολογείτε. Η έγκυρη είσοδος μορφοποιείται με την εσοχή που επιλέγετε ή ελαχιστοποιείται σε μία μόνο γραμμή. Για μη έγκυρη είσοδο λαμβάνετε ακριβές μήνυμα σφάλματος με γραμμή και στήλη, επισημασμένο απόσπασμα και, για τα συνηθισμένα λάθη, διόρθωση με ένα κλικ. Όλα εκτελούνται στο πρόγραμμα περιήγησής σας, έτσι οι αποκρίσεις API, τα αρχεία ρυθμίσεων και οι εξαγωγές δεν φεύγουν ποτέ από τον υπολογιστή σας.

Τι κάνει αυτός ο JSON formatter

  • Μορφοποίηση JSON (beautify) με 2 κενά, 4 κενά ή tab. Το αποτέλεσμα διατηρεί την αρχική σειρά των κλειδιών, εκτός αν επιλέξετε Ταξινόμηση κλειδιών.
  • Ελαχιστοποίηση JSON (minify) με αφαίρεση κάθε κενού και κάθε αλλαγής γραμμής. Η ένδειξη μεγέθους κάτω από το αποτέλεσμα δείχνει πόσα bytes εξοικονομήσατε.
  • Έλεγχος εγκυρότητας JSON σε πραγματικό χρόνο σύμφωνα με το RFC 8259, το ισχύον πρότυπο JSON. Η γραμμή κατάστασης γίνεται πράσινη τη στιγμή που το έγγραφο είναι σωστό.
  • Αυτόματη διόρθωση συνηθισμένων σφαλμάτων: περιττά κόμματα, μονά εισαγωγικά, κλειδιά χωρίς εισαγωγικά, σχόλια, τιμές της Python όπως True, None και NaN, αριθμοί όπως .5 ή +1.
  • Φόρτωση αρχείων με το κουμπί Άνοιγμα αρχείου ή σύροντας ένα αρχείο .json στο πεδίο εισόδου. Στη συνέχεια μπορείτε να κατεβάσετε το αποτέλεσμα ή να το στείλετε πίσω στην είσοδο για ένα ακόμη πέρασμα.

Γιατί το μήνυμα σφάλματος μετράει περισσότερο από το κόκκινο χρώμα

Οι περισσότεροι online validators λένε απλώς ότι κάτι δεν πάει καλά. Τα προγράμματα περιήγησης δεν είναι πολύ καλύτερα. Το JSON.parse στο Chrome αναφέρει Unexpected token } in JSON at position 148, ενώ το Firefox γράφει expected property name or '}', και κανένα από τα δύο δεν σας λέει σε ποια γραμμή να κοιτάξετε. Αυτό το εργαλείο έχει δικό του αναλυτή (parser) που θυμάται πού ξεκινά κάθε σύμβολο. Όταν σταματήσει, λαμβάνετε τη γραμμή και τη στήλη, ένα απόσπασμα αυτής της γραμμής με το σημάδι ^ κάτω από τον χαρακτήρα που προκαλεί το πρόβλημα και μια υπόδειξη σε απλή γλώσσα, όπως Πιθανότατα λείπει ένα κόμμα ανάμεσα σε δύο ιδιότητες. Το κουμπί Μετάβαση στο σφάλμα μεταφέρει τον κέρσορα κατευθείαν σε αυτή τη θέση της εισόδου.

Τα πιο συχνά λάθη που βλέπουμε στα έγγραφα που επικολλώνται:

ΕίσοδοςΠρόβλημαΣωστό JSON
{'name': 'Ada'}μονά εισαγωγικά{"name": "Ada"}
{name: "Ada"}κλειδί χωρίς εισαγωγικά{"name": "Ada"}
[1, 2, 3,]περιττό κόμμα στο τέλος[1, 2, 3]
{"a": 1 "b": 2}λείπει κόμμα{"a": 1, "b": 2}
{"ok": True}σταθερά της Python{"ok": true}
{"x": 007}μηδενικό στην αρχή{"x": 7} ή {"x": "007"}
// commentσχόλιοδεν επιτρέπεται στο JSON

Το κουμπί Διόρθωσέ το διορθώνει όλα αυτά εκτός από το κόμμα που λείπει και το μηδενικό στην αρχή. Η διόρθωση είναι σκόπιμα συντηρητική. Δεν μαντεύει ποτέ πού ανήκει ένα κόμμα που λείπει, επειδή ένα κόμμα σε λάθος σημείο αλλάζει το νόημα των δεδομένων, και το 007 μπορεί να σημαίνει τον αριθμό 7 ή έναν κωδικό. Σε αυτές τις περιπτώσεις λαμβάνετε την ακριβή θέση του σφάλματος.

Μεγάλοι αριθμοί, σειρά κλειδιών και ό,τι άλλο συνήθως χαλάει

Πολλοί formatters καλούν το JSON.parse και μετά το JSON.stringify. Αυτή η διαδρομή μετ’ επιστροφής αλλοιώνει αθόρυβα τα δεδομένα. Ένα αναγνωριστικό Twitter ή Snowflake όπως το 1234567890123456789 ξεπερνά το όριο 2^53 των αριθμών της JavaScript και επιστρέφει ως 1234567890123456800. Η τιμή 1.0 γίνεται 1 και το 1e3 γίνεται 1000. Αυτός ο JSON formatter δεν μετατρέπει ποτέ τους αριθμούς σε αριθμούς κινητής υποδιαστολής. Αντιγράφει κάθε τιμή ακριβώς όπως γράφτηκε, οπότε το αποτέλεσμα είναι πιστή αναδιάταξη της εισόδου και όχι επανερμηνεία της. Το ίδιο ισχύει για τις ακολουθίες διαφυγής μέσα στις συμβολοσειρές: το "\u00e9" παραμένει "\u00e9" και δεν μετατρέπεται σε "é".

Διατηρείται επίσης η σειρά των κλειδιών. Η προδιαγραφή του JSON ορίζει ότι τα μέλη ενός αντικειμένου δεν έχουν σειρά, όμως τα αρχεία ρυθμίσεων, τα δεδομένα δοκιμών και οι αναθεωρήσεις κώδικα διαβάζονται πολύ πιο εύκολα όταν η σειρά μένει σταθερή. Αν προτιμάτε μια κανονικοποιημένη μορφή, για παράδειγμα για να συγκρίνετε δύο αποκρίσεις API σε ένα εργαλείο diff, ενεργοποιήστε την Ταξινόμηση κλειδιών και τα δύο έγγραφα θα παραθέτουν τις ιδιότητές τους αλφαβητικά σε κάθε επίπεδο εμφώλευσης.

Μορφοποίηση JSON ή ελαχιστοποίηση (minify): πότε χρειάζεται το καθένα

Το μορφοποιημένο JSON είναι για ανθρώπους. Χρησιμοποιήστε το όταν ελέγχετε μια απόκριση API, όταν γράφετε ένα package.json, ένα tsconfig.json ή ένα έγγραφο OpenAPI, ή όταν αποθηκεύετε δεδομένα δοκιμών σε ένα αποθετήριο όπου κάθε diff πρέπει να δείχνει μία αλλαγή ανά γραμμή. Τα 2 κενά είναι η σύμβαση στον κόσμο της JavaScript, τα 4 κενά είναι συνηθισμένα σε έργα Python και .NET, ενώ τα tab επιτρέπουν σε κάθε αναγνώστη να επιλέξει το δικό του πλάτος.

Το ελαχιστοποιημένο JSON είναι για μηχανές. Τα κενά αποτελούν συνήθως το 20 έως 40 τοις εκατό ενός μορφοποιημένου εγγράφου, οπότε η αφαίρεσή τους μικραίνει τα δεδομένα που στέλνονται στα προγράμματα περιήγησης, τις τιμές που αποθηκεύονται στο Redis ή σε μια στήλη βάσης δεδομένων και τα χαρακτηριστικά data-* που ενσωματώνονται σε HTML. Η συμπίεση gzip καλύπτει μέρος αυτής της διαφοράς, αλλά η ελαχιστοποιημένη εκδοχή εξακολουθεί να συμπιέζεται σε μικρότερο αποτέλεσμα. Η ένδειξη μεγέθους κάτω από το αποτέλεσμα δείχνει την ακριβή διαφορά για το δικό σας έγγραφο.

Εργασία με JSON στο τερματικό και σε επεξεργαστές κώδικα

Για αρχεία που επεξεργάζεστε συχνά, ένα εργαλείο γραμμής εντολών είναι ταχύτερο από οποιονδήποτε ιστότοπο. Το jq . file.json μορφοποιεί, το jq -c . file.json ελαχιστοποιεί και το python -m json.tool file.json λειτουργεί όπου είναι εγκατεστημένη η Python. Το Visual Studio Code μορφοποιεί JSON με Shift+Alt+F και το ελέγχει έναντι ενός σχήματος όταν προσθέσετε την ιδιότητα $schema. Αυτή η σελίδα είναι για τις υπόλοιπες περιπτώσεις: μια απόκριση που αντιγράψατε από την καρτέλα Network, μια γραμμή από αρχείο καταγραφής, ένα απόσπασμα ρυθμίσεων από ένα wiki ή ένας γρήγορος έλεγχος σε υπολογιστή όπου δεν μπορείτε να εγκαταστήσετε τίποτα.

Σχετικά εργαλεία σε αυτόν τον ιστότοπο: ο κωδικοποιητής και αποκωδικοποιητής Base64 αποκωδικοποιεί το τμήμα δεδομένων (payload) ενός JWT, που είναι JSON κωδικοποιημένο σε Base64url. Ο μετατροπέας χρονικής σήμανσης UNIX μετατρέπει τους αριθμούς createdAt που υπάρχουν στις περισσότερες αποκρίσεις API σε ευανάγνωστες ημερομηνίες και ο αποκωδικοποιητής UUID σας δείχνει την έκδοση και τη χρονοσήμανση των αναγνωριστικών στα δεδομένα σας. Περισσότερα βοηθητικά εργαλεία θα βρείτε στην κατηγορία εργαλεία για προγραμματιστές.

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

Ανεβαίνει το JSON μου σε κάποιον διακομιστή; Όχι. Η ανάλυση, η μορφοποίηση και η διόρθωση εκτελούνται εξ ολοκλήρου στο πρόγραμμα περιήγησής σας σε JavaScript. Μόλις φορτωθεί η σελίδα, μπορείτε να αποσυνδεθείτε από το δίκτυο και το εργαλείο συνεχίζει να λειτουργεί. Τίποτα δεν καταγράφεται ούτε αποθηκεύεται.
Γιατί ο validator απορρίπτει τα σχόλια, ενώ ο επεξεργαστής μου τα δέχεται; Τα σχόλια αφαιρέθηκαν σκόπιμα από το JSON από τον δημιουργό του, τον Douglas Crockford, ώστε η μορφή να μη χρησιμοποιείται για οδηγίες προς τον αναλυτή. Αρχεία όπως το tsconfig.json ή το .vscode/settings.json είναι τεχνικά JSONC, ένα υπερσύνολο που υποστηρίζουν οι επεξεργαστές κώδικα. Οι αυστηροί αναλυτές σε API, βάσεις δεδομένων και στις περισσότερες γλώσσες προγραμματισμού τα απορρίπτουν. Το κουμπί διόρθωσης αφαιρεί τα σχόλια, ώστε το αποτέλεσμα να είναι έγκυρο παντού.
Μπορώ να μορφοποιήσω JSON Lines ή πολλά αντικείμενα μαζί; Ένα έγγραφο JSON περιέχει ακριβώς μία τιμή. Αν επικολλήσετε πολλά αντικείμενα χωρισμένα με κόμματα ή αλλαγές γραμμής, ο validator σταματά στην πρώτη επιπλέον τιμή. Περικλείστε τα σε τετράγωνες αγκύλες για να σχηματίσετε έναν πίνακα και μετά μορφοποιήστε. Το κουμπί διόρθωσης δεν το κάνει αυτόματα, επειδή δεν μπορεί να ξέρει αν η είσοδος προοριζόταν να είναι ένα ενιαίο έγγραφο.
Ποιο είναι το μέγιστο μέγεθος; Δεν υπάρχει σταθερό όριο. Έγγραφα λίγων megabytes μορφοποιούνται σε πολύ λιγότερο από ένα δευτερόλεπτο σε έναν φορητό υπολογιστή. Η χρωματική επισήμανση της σύνταξης απενεργοποιείται πάνω από περίπου 400 kB, ώστε η σελίδα να ανταποκρίνεται γρήγορα, αλλά η αντιγραφή και η λήψη λειτουργούν κανονικά.
Αλλάζει η ταξινόμηση των κλειδιών τα δεδομένα; Όχι. Τα αντικείμενα στο JSON εξ ορισμού δεν έχουν σειρά (δείτε το άρθρο για το JSON στη Βικιπαίδεια), οπότε ένας αναλυτής διαβάζει το ταξινομημένο και το αρχικό έγγραφο ως την ίδια τιμή. Οι πίνακες δεν αναδιατάσσονται ποτέ, επειδή η σειρά τους είναι μέρος των δεδομένων.
Πώς κάνω διαφυγή (escape) σε JSON για να το ενσωματώσω σε συμβολοσειρά; Πρώτα ελαχιστοποιήστε το και μετά κάντε διαφυγή σε κάθε ανάποδη κάθετο και κάθε διπλό εισαγωγικό. Πολλές γλώσσες το κάνουν απευθείας: το JSON.stringify(JSON.stringify(obj)) στη JavaScript ή το json.dumps(json.dumps(obj)) στην Python παράγουν μια συμβολοσειρά JSON που περιέχει το κείμενο JSON.

Θα εκτιμούσα αν μοιραζόσασταν αυτές τις σελίδες με φίλους, τις προσθέσετε στους σελιδοδείκτες ή τις συνδέσετε. Ευχαριστώ! 🙏