Tech Help
Συνηθισμένα σφάλματα JSON: τελικό κόμμα, εισαγωγικά και Unexpected token
Διορθώστε μη έγκυρο JSON: τελικό κόμμα, μονά εισαγωγικά, κλειδιά χωρίς εισαγωγικά και Unexpected token. Δείτε γιατί αποτυγχάνει το JSON.parse και πώς να επικυρώσετε JSON.
Τα περισσότερα σφάλματα JSON προέρχονται από αυστηρούς κανόνες σύνταξης: τελικό κόμμα, μονά εισαγωγικά, ονόματα ιδιοτήτων χωρίς εισαγωγικά, κόμμα που λείπει, αταίριαστες αγκύλες, μη έγκυρο escape ή σχόλια.
Το JSON μοιάζει με αντικείμενο JavaScript, αλλά είναι αυστηρότερο. Τα ονόματα ιδιοτήτων και οι συμβολοσειρές χρειάζονται διπλά εισαγωγικά.
Αν δείτε Unexpected token, ο αναφερόμενος χαρακτήρας μπορεί να είναι το σημείο όπου σταμάτησε η ανάλυση—όχι απαραίτητα όπου ξεκίνησε το αρχικό λάθος.
Το JSON σας σημειώνεται ως μη έγκυρο. Συνήθως είναι μικρό συντακτικό πρόβλημα, όχι κατεστραμμένη μορφή αρχείου. Τα επτά λάθη παρακάτω προκαλούν τα περισσότερα Unexpected token.
Γιατί σπάει τόσο εύκολα το JSON;
Το JSON είναι μορφή δεδομένων με αυστηρή σύνταξη. Ένα κυριολεκτικό αντικείμενο JavaScript μπορεί να μοιάζει και να παραμένει μη έγκυρο JSON. Στο τυπικό JSON, ονόματα ιδιοτήτων και συμβολοσειρές χρειάζονται διπλά εισαγωγικά, το τελικό κόμμα δεν επιτρέπεται και τα σχόλια δεν είναι μέρος της μορφής.
1. Τελικά κόμματα
Το επιπλέον κόμμα μετά την τελευταία ιδιότητα είναι το πρόβλημα. Το τυπικό JSON δεν το επιτρέπει.
Μη έγκυρο
{
"name": "Alex",
"age": 30,
}
Έγκυρο
{
"name": "Alex",
"age": 30
}
Ο ίδιος κανόνας ισχύει για πίνακες. Αφαιρέστε το κόμμα μετά το τελευταίο στοιχείο.
Μη έγκυρο
[
"red",
"green",
]
Έγκυρο
[
"red",
"green"
]
2. Μονά εισαγωγικά αντί για διπλά
Η JavaScript συχνά δέχεται μονά εισαγωγικά. Το JSON όχι. Ονόματα ιδιοτήτων και τιμές συμβολοσειρών πρέπει να χρησιμοποιούν διπλά εισαγωγικά.
Μη έγκυρο
{
'name': 'Alex'
}
Έγκυρο
{
"name": "Alex"
}
3. Ονόματα ιδιοτήτων χωρίς εισαγωγικά
Στη JavaScript μπορείτε μερικές φορές να γράψετε name χωρίς εισαγωγικά. Στο JSON κάθε όνομα ιδιότητας πρέπει να είναι συμβολοσειρά με διπλά εισαγωγικά.
Μη έγκυρο
{
name: "Alex",
age: 30
}
Έγκυρο
{
"name": "Alex",
"age": 30
}
4. Κόμματα που λείπουν ανάμεσα σε τιμές
Ιδιότητες και στοιχεία πίνακα χρειάζονται κόμμα ανάμεσά τους. Ο αναλυτής μπορεί να αναφέρει Unexpected token στο επόμενο εισαγωγικό ή άγκιστρο, όχι στο κόμμα που λείπει.
Μη έγκυρο
{
"name": "Alex"
"age": 30
}
Έγκυρο
{
"name": "Alex",
"age": 30
}
5. Αγκύλες που λείπουν ή περισσεύουν
Τα αντικείμενα χρησιμοποιούν { }. Οι πίνακες χρησιμοποιούν [ ]. Το ένθετο JSON συχνά αποτυγχάνει όταν λείπει ], περισσεύει } ή έχουν ανταλλαχτεί. Μετρήστε ζεύγη ανοίγματος και κλεισίματος.
Μη έγκυρο
{
"items": [1, 2
}
Έγκυρο
{
"items": [1, 2]
}
6. Μη έγκυρες ακολουθίες escape
Μέσα σε συμβολοσειρά JSON, η ανάστροφη κάθετος ξεκινά escape. Ακολουθίες όπως ", \ και \n είναι έγκυρες. Μια διαδρομή Windows ως C:\Users δεν είναι: το \U δεν είναι νόμιμο JSON escape. Διπλασιάστε τις ανάστροφες καθέτους, αλλιώς ο αναλυτής σταματά σε εκείνον τον χαρακτήρα.
Μη έγκυρο
{"file":"C:\Users\Alex"}
Έγκυρο
{"file":"C:\\Users\\Alex"}
7. Σχόλια μέσα στο JSON
Το τυπικό JSON δεν έχει σχόλια. Ορισμένα εργαλεία ρύθμισης δέχονται // ή /* */ (JSONC, JSON5 και παρόμοια). Αυτό δεν είναι τυπικό JSON και το JSON.parse το απορρίπτει.
Μη έγκυρο
{
// user name
"name": "Alex"
}
Τι σημαίνει Unexpected token;
Ο αναλυτής συνάντησε χαρακτήρα που δεν επιτρεπόταν σε εκείνη τη θέση. Το αναφερόμενο σημείο είναι όπου σταμάτησε η ανάγνωση. Αν παραλείψατε κόμμα νωρίτερα, το σφάλμα μπορεί να δείχνει στο εισαγωγικό της επόμενης ιδιότητας. Η διατύπωση διαφέρει ανά χρόνο εκτέλεσης· μην περιμένετε κάθε πρόγραμμα περιήγησης να τυπώνει την ίδια πρόταση.
Τι σημαίνει Unexpected end of JSON input;
Το κείμενο τελείωσε πριν ολοκληρωθεί η τιμή. Τυπικές αιτίες: λείπει } ή ], κομμένη είσοδος, κενό σώμα ή διακοπείσα απόκριση API. Δεν είναι ένα μόνο σφάλμα.
Γιατί αποτυγχάνει το JSON.parse();
Το JSON.parse() δέχεται μόνο έγκυρο κείμενο JSON. Αυτό πετυχαίνει:
const text = '{"name":"Alex"}';
const data = JSON.parse(text);
Αυτό αποτυγχάνει, γιατί τα μονά εισαγωγικά δεν είναι JSON:
const text = "{'name':'Alex'}";
JSON.parse(text);
Το ακριβές μήνυμα σφάλματος εξαρτάται από τον χρόνο εκτέλεσης JavaScript. Θεωρήστε το μήνυμα υπόδειξη και ελέγξτε κόμματα, εισαγωγικά και αγκύλες κοντά στη θέση.
Ένα κυριολεκτικό αντικείμενο JavaScript μπορεί να μοιάζει { name: 'Alex' }. Το έγκυρο JSON πρέπει να μοιάζει { "name": "Alex" }: ονόματα και συμβολοσειρές με διπλά εισαγωγικά, χωρίς τελικό κόμμα, χωρίς σχόλια.
- Κείμενο JSON
- Ο αναλυτής διαβάζει τεκμήρια
- Έγκυρα δεδομένα ή Unexpected token
Πώς να βρείτε γρήγορα σφάλμα JSON
Δουλέψτε με αυτή τη σειρά. Μην αρχίσετε ξαναγράφοντας όλο το αρχείο.
- Περάστε το JSON από επικυρωτή.
- Διαβάστε το πρώτο αναφερόμενο σφάλμα.
- Κοιτάξτε λίγο πριν την αναφερόμενη θέση.
- Ελέγξτε κόμματα, ιδίως τελικά και ελλείποντα.
- Ελέγξτε εισαγωγικά: μόνο διπλά.
- Ταιριάξτε { } και [ ].
- Ελέγξτε escape ανάστροφης καθέτου στις συμβολοσειρές.
- Αφαιρέστε σχόλια αν χρειάζεστε αυστηρό JSON.
Γρήγορος χάρτης των συνηθισμένων διορθώσεων:
| Πρόβλημα | Διόρθωση |
|---|---|
| Τελικό κόμμα | Διαγράψτε το κόμμα μετά το τελευταίο στοιχείο. |
| Μονά εισαγωγικά | Χρησιμοποιήστε διπλά εισαγωγικά για ονόματα και συμβολοσειρές. |
| Κλειδί χωρίς εισαγωγικά | Τυλίξτε το όνομα ιδιότητας σε διπλά εισαγωγικά. |
| Κόμμα που λείπει | Βάλτε κόμμα ανάμεσα σε ιδιότητες ή στοιχεία πίνακα. |
| Αγκύλη που λείπει | Κλείστε κάθε ζεύγος { } και [ ]. |
| Μη έγκυρο escape | Χρησιμοποιήστε νόμιμο escape ή διπλασιάστε ανάστροφες καθέτους σε διαδρομές. |
| Σχόλιο | Αφαιρέστε // και /* */ για τυπικό JSON. |
Επικυρώστε και μορφοποιήστε JSON στο πρόγραμμα περιήγησης
Το NEXNARA Μορφοποίηση και σύγκριση JSON μπορεί να ελέγξει JSON σε αυτή τη συσκευή.
Μπορείτε να επικυρώσετε, να ομορφύνετε με 2 κενά, 4 κενά ή στηλοθέτες, minify, να συγκρίνετε δύο έγγραφα (JSON Diff) και να ανοίξετε αρχείο .json. Η ανάλυση χρησιμοποιεί JSON.parse στο πρόγραμμα περιήγησης, όχι eval.
Έγγραφα μεγαλύτερα από 5 MB μπορεί να φαίνονται αργά. Κείμενο μεγαλύτερο από 15 MB δεν επεξεργάζεται στο πρόγραμμα περιήγησης, ώστε η σελίδα να μένει αποκρίσιμη.
Η ίδια η επεξεργασία JSON γίνεται στο πρόγραμμα περιήγησής σας. Το κείμενο δεν στέλνεται σε διακομιστή NEXNARA για αυτό το εργαλείο. Διαφημίσεις και άλλα χαρακτηριστικά ιστότοπου χρησιμοποιούν ακόμα το δίκτυο· αυτό είναι ξεχωριστό από την επεξεργασία.
Χρειάζεστε έλεγχο μη έγκυρου JSON; Ανοίξτε το Μορφοποίηση και σύγκριση JSON και επικολλήστε το κείμενο.
FAQ
Γιατί το JSON μου λέει Unexpected token;
Ο αναλυτής συνάντησε χαρακτήρα που δεν επιτρεπόταν εκεί. Το πραγματικό λάθος—συχνά κόμμα που λείπει ή μονά εισαγωγικά—μπορεί να κάθεται ακριβώς πριν από εκείνη τη θέση.
Επιτρέπονται τελικά κόμματα στο JSON;
Όχι. Το τυπικό JSON δεν επιτρέπει κόμμα μετά την τελευταία ιδιότητα ή στοιχείο πίνακα. Τα κυριολεκτικά αντικείμενα JavaScript συχνά το επιτρέπουν.
Μπορεί το JSON να χρησιμοποιεί μονά εισαγωγικά;
Όχι. Ονόματα ιδιοτήτων και συμβολοσειρές πρέπει να χρησιμοποιούν διπλά εισαγωγικά.
Μπορεί το JSON να περιέχει σχόλια;
Όχι στο τυπικό JSON. Ορισμένα εργαλεία δέχονται JSONC ή JSON5 με σχόλια· το JSON.parse τα απορρίπτει και πάλι.
Γιατί αποτυγχάνει το JSON.parse();
Η συμβολοσειρά δεν είναι έγκυρο JSON. Τυπικές αιτίες είναι τελικό κόμμα, μονά εισαγωγικά, κλειδιά χωρίς εισαγωγικά, σχόλια ή κομμένη τιμή. Το ακριβές μήνυμα εξαρτάται από τον χρόνο εκτέλεσης.
Πώς ελέγχω αν το JSON είναι έγκυρο;
Επικολλήστε το σε επικυρωτή όπως το Μορφοποίηση και σύγκριση JSON, ή καλέστε JSON.parse σε κονσόλα. Αν η ανάλυση ρίξει εξαίρεση, το κείμενο δεν είναι έγκυρο JSON.