Μορφοποίηση και επικύρωση JSON
Επικολλήστε JSON για να το μορφοποιήσετε ευανάγνωστα, να το ελαχιστοποιήσετε ή να ταξινομήσετε τα κλειδιά του. Αν η ανάλυση αποτύχει, το εργαλείο δείχνει τη γραμμή και τη στήλη όπου σταμάτησε ο αναλυτής, με έναν δείκτη κάτω από το πρόβλημα. Έτσι, ένα κόμμα που λείπει σε μια απόκριση 3.000 γραμμών εντοπίζεται σε δευτερόλεπτα.
0 χαρακτήρες · 0 λέξεις · 0 γραμμές
0 χαρακτήρες · 0 λέξεις · 0 γραμμές
Εκτελείται εξ ολοκλήρου σε αυτήν την καρτέλα του προγράμματος περιήγησης. Το κείμενό σας δεν ανεβαίνει ούτε αποθηκεύεται πουθενά.
Τύποι τιμών JSON
Το RFC 8259 επιτρέπει ακριβώς αυτές τις τιμές. Τα αντικείμενα και οι πίνακες φωλιάζουν· όλα τα άλλα είναι φύλλα.
| Τύπος | Παράδειγμα | Κανόνας |
|---|---|---|
| Αντικείμενο | {"id": 7, "tags": ["a"]} | Τα κλειδιά πρέπει να είναι συμβολοσειρές σε διπλά εισαγωγικά· τα μέλη χωρίζονται με κόμματα, χωρίς κόμμα στο τέλος. |
| Πίνακας | [1, "two", null] | Διατεταγμένη λίστα τιμών οποιουδήποτε τύπου, επιτρέπονται μικτοί τύποι. |
| Συμβολοσειρά | "caf\u00e9 \"quoted\"" | Μόνο διπλά εισαγωγικά· οι χαρακτήρες ελέγχου πρέπει να έχουν escape· τα escape \u χρησιμοποιούν τέσσερα δεκαεξαδικά ψηφία. |
| Αριθμός | -12.5e3 | Μόνο δεκαδικοί: προαιρετικό μείον, χωρίς αρχικά μηδενικά, προαιρετικό κλασματικό μέρος και εκθέτης. Όχι NaN ή Infinity. |
| true, false και null | true | Πεζά, χωρίς εισαγωγικά. |
Τι απορρίπτει ο parser
Κάθε είσοδος παρακάτω δόθηκε στο ίδιο JSON.parse που χρησιμοποιεί ο μορφοποιητής κατά τη δημιουργία αυτής της σελίδας.
| Είσοδος | Πρόβλημα | JSON.parse |
|---|---|---|
{"a": 1,} | Κόμμα στο τέλος | Απορρίπτεται |
{'a': 1} | Συμβολοσειρές σε μονά εισαγωγικά | Απορρίπτεται |
{"a": 1 /* note */} | Σχόλια | Απορρίπτεται |
{a: 1} | Κλειδί χωρίς εισαγωγικά | Απορρίπτεται |
{"n": NaN} | Το NaN δεν είναι αριθμός JSON | Απορρίπτεται |
{"n": 012} | Αρχικό μηδενικό | Απορρίπτεται |
{"n": 0x1F} | Δεκαεξαδικός αριθμός | Απορρίπτεται |
Escape σε συμβολοσειρές JSON
| Χαρακτήρας | Γραφή σε JSON |
|---|---|
| Διπλό εισαγωγικό | "\"" |
| Ανάστροφη κάθετος | "\\" |
| Αλλαγή γραμμής | "\n" |
| Tab | "\t" |
| Επιστροφή φορέα | "\r" |
| Χαρακτήρας ελέγχου U+0001 | "\u0001" |
| Κάθετος (το escape είναι προαιρετικό) | "/" |
| Γράμμα εκτός ASCII (δεν χρειάζεται escape) | "é" |
Οι κανόνες που ακολουθεί ένα έγκυρο έγγραφο JSON
Το JSON ορίζεται από το RFC 8259 (ουσιαστικά ταυτόσημο με το ECMA-404). Ένα έγγραφο είναι μία μόνο τιμή: αντικείμενο, πίνακας, συμβολοσειρά, αριθμός, true, false ή null. Τα κλειδιά των αντικειμένων είναι πάντα συμβολοσειρές σε διπλά εισαγωγικά. Οι συμβολοσειρές χρησιμοποιούν μόνο διπλά εισαγωγικά και πρέπει να κάνουν escape στο εισαγωγικό, στην ανάστροφη κάθετο και σε κάθε χαρακτήρα ελέγχου κάτω από το U+0020. Έτσι, οι χαρακτήρες tab και οι αλλαγές γραμμής μέσα σε συμβολοσειρά γράφονται ως \t και \n. Το RFC 8259 απαιτεί επίσης UTF-8 για το JSON που ανταλλάσσεται μεταξύ συστημάτων.
Οι αριθμοί είναι δεκαδικοί: χωρίς αρχικά μηδενικά, χωρίς δεκαεξαδικούς, χωρίς NaN ή Infinity και χωρίς πρόσημο συν μπροστά. Η μορφή δεν έχει σχόλια ούτε τελικά κόμματα. Αυτοί οι δύο τελευταίοι κανόνες προκαλούν τα περισσότερα σφάλματα στην πράξη, επειδή τα αντικείμενα της JavaScript, το JSON5 και πολλά αρχεία ρυθμίσεων επιτρέπουν και τα δύο. Ο πίνακας αναφοράς παρακάτω προέκυψε δίνοντας κάθε συνηθισμένο λάθος στον ίδιο parser που χρησιμοποιεί ο μορφοποιητής.
Μορφοποίηση, ελαχιστοποίηση, ταξινόμηση
Η εμφανίσιμη μορφοποίηση (pretty-print) προσθέτει αλλαγές γραμμής και εσοχές ώστε η δομή να διαβάζεται εύκολα. Τα δύο κενά είναι το συνηθέστερο στυλ στα έργα JavaScript, τα τέσσερα κενά η συνήθης επιλογή με το json.dumps(indent=4) της Python, ενώ τα tab αφήνουν τον καθένα να διαλέξει πλάτος. Η ελαχιστοποίηση αφαιρεί κάθε περιττό κενό, μειώνοντας το μέγεθος των δεδομένων API και επιτρέποντας σε ένα έγγραφο να χωρέσει σε μία γραμμή για αρχεία καταγραφής ή μεταβλητές περιβάλλοντος.
Η ταξινόμηση κλειδιών τακτοποιεί αλφαβητικά τα μέλη κάθε αντικειμένου, αναδρομικά. Τα αντικείμενα JSON εξ ορισμού δεν έχουν σειρά, οπότε η ταξινόμηση δεν αλλάζει το νόημα, αλλά διευκολύνει πολύ τη σύγκριση δύο εγγράφων από διαφορετικά συστήματα. Έχετε υπόψη ότι η ανάλυση μετατρέπει τους αριθμούς σε doubles της JavaScript: οι ακέραιοι πάνω από 2^53 (9.007.199.254.740.992), όπως ορισμένα αναγνωριστικά βάσεων δεδομένων, χάνουν ακρίβεια κατά την αναμορφοποίηση, γι' αυτό κρατήστε τους ως συμβολοσειρές.
Από JSON σε άλλες μορφές
Ένα μορφοποιημένο έγγραφο διαβάζεται πιο εύκολα, αλλά κάποιες φορές το χρειάζεστε σε άλλη μορφή. Ένας πίνακας αντικειμένων γίνεται υπολογιστικό φύλλο με το JSON σε CSV, ενώ ο μετατροπέας δεδομένων μετατρέπει ολόκληρα αρχεία μεταξύ JSON, XML, YAML και CSV.
Συχνές ερωτήσεις
- Γιατί το εργαλείο απορρίπτει το JSON μου όταν έχει σχόλια;
- Το τυπικό JSON δεν έχει σύνταξη σχολίων· το RFC 8259 την αφήνει εσκεμμένα απ' έξω. Αφαιρέστε τα σχόλια ή κρατήστε το αρχείο ως JSONC ή JSON5, αν το εργαλείο που το διαβάζει υποστηρίζει αυτές τις μορφές.
- Τι σημαίνει «Unexpected token» σε ένα σφάλμα JSON;
- Ο parser βρήκε χαρακτήρα που δεν μπορεί να εμφανιστεί σε εκείνη τη θέση, όπως μονό εισαγωγικό, τελικό κόμμα πριν από το } ή κλειδί χωρίς εισαγωγικά. Η γραμμή και η στήλη που εμφανίζονται δείχνουν αυτόν τον χαρακτήρα.
- Αλλάζει η ταξινόμηση κλειδιών τα δεδομένα μου;
- Όχι. Η σειρά των μελών ενός αντικειμένου δεν έχει νόημα στο JSON, άρα το ταξινομημένο έγγραφο είναι ισοδύναμο. Η σειρά των πινάκων έχει νόημα και δεν αλλάζει ποτέ.
- Γιατί άλλαξε ένας μεγάλος αριθμός μετά τη μορφοποίηση;
- Η JavaScript αποθηκεύει τους αριθμούς ως 64-bit floats, που αναπαριστούν ακριβώς ακέραιους μόνο έως 2^53. Τα μεγαλύτερα αναγνωριστικά στρογγυλοποιούνται κατά την ανάλυση· μεταδώστε τα ως συμβολοσειρές για να κρατήσετε κάθε ψηφίο.
- Μπορώ να μορφοποιήσω ένα αρχείο JSON αντί να το επικολλήσω;
- Ανοίξτε το αρχείο σε οποιονδήποτε επεξεργαστή κειμένου, επιλέξτε όλα και επικολλήστε το εδώ. Πολύ μεγάλα αρχεία δεκάδων megabyte μπορεί να κάνουν την καρτέλα αργή όσο το πεδίο κειμένου τα εμφανίζει.