Δεδομένα JSON (.json)
RFC ΤυπικόΤο JavaScript Object Notation (JSON) είναι μια ελαφριά, ευανάγνωστη από τον άνθρωπο μορφή κειμένου για την ανταλλαγή δεδομένων, η οποία υποστηρίζεται από πολλές γλώσσες προγραμματισμού και χρησιμοποιείται συχνά σε API ιστού.
Μετατροπή JSON σε HTML
Δωρεάν μετατροπέας από JSON σε HTML εντός του προγράμματος περιήγησης. Μετατρέψτε αρχεία άμεσα στη συσκευή σας.
Συμπίεση JSON στο διαδίκτυο
Ιδιωτικά - τα αρχεία δεν φεύγουν ποτέ από τη συσκευή σας
Επιθεώρηση & Μεταδεδομένα
Τα λειτουργικά συστήματα και τα εργαλεία ανάλυσης αρχείων αναγνωρίζουν τα αρχεία JSON ελέγχοντας την αρχική δυαδική ακολουθία byte:
Υπογραφή κεφαλίδας σε επίπεδο byte (Magic Bytes)
Τα λειτουργικά συστήματα και τα εργαλεία ανάλυσης αρχείων αναγνωρίζουν τα αρχεία JSON ελέγχοντας την αρχική δυαδική ακολουθία byte:
ΔΕΚΑΕΞΑΔΙΚΗ ΥΠΟΓΡΑΦΗ (OFFSET 0):
7B or 5BΑΝΑΠΑΡΑΣΤΑΣΗ ASCII: { or [
Τυποποίηση: RFC 8259 / ECMA-404 / ISO/IEC 21778
Τεχνικές Προδιαγραφές
| Αρχιτεκτονική Περιέκτη | Ελαφρύ, βασισμένο σε κείμενο, ανεξάρτητο από γλώσσα προγραμματισμού μορφότυπο ανταλλαγής δεδομένων |
| Συμπίεση | Τα Gzip, Brotli και Zstandard μπορούν να συμπιέσουν κείμενο JSON· το μέγεθος που προκύπτει εξαρτάται από τα δεδομένα και τις ρυθμίσεις. |
| Σειρά byte (endianness) | Unicode κωδικοποιημένο σε UTF-8 (δεν συνιστάται Byte Order Mark / BOM) |
| Χρωματικοί Χώροι | Δεν εφαρμόζεται |
| Κανάλια & Δομή | Έξι βασικοί τύποι δεδομένων: αντικείμενο, πίνακας, αλφαριθμητικό, αριθμός, λογική τιμή, null |
| Μέγιστες Διαστάσεις | Απεριόριστες· περιορίζονται μόνο από τη μνήμη του αναλυτή (parser) και το μέγιστο μήκος συμβολοσειράς |
| Διαφάνεια | Δεν εφαρμόζεται |
| Ροή δεδομένων και προοδευτική φόρτωση | Το NDJSON (Newline Delimited JSON) / JSON Lines επιτρέπει προοδευτική επεξεργασία ροής |
Τεχνικός Πίνακας Σύγκρισης: JSON έναντι Ανταγωνιστών
| Τεχνικό χαρακτηριστικό | JSON (Τρέχον) | YAML | XML | Protocol Buffers |
|---|---|---|---|---|
| Συντακτική Πολυπλοκότητα | Ελάχιστη (6 τύποι, αυστηρή σύνταξη) | Υψηλή (βασισμένη σε εσοχές, σύνθετη προδιαγραφή) | Υψηλή (πολύλογες ετικέτες κλεισίματος, χώροι ονομάτων) | Δυαδική μορφή μετάδοσης ορισμένη από σχήμα |
| Απόδοση Ανάλυσης (Parsing) | Εξαιρετικά γρήγορη σε όλες τις σύγχρονες γλώσσες | Αργή (σύνθετη ανάλυση εσοχών) | Μέτρια προς αργή (βαριά κατασκευή DOM) | Υπερταχεία (δυαδική αποσειριοποίηση μηδενικής αντιγραφής) |
| Υποστήριξη Σχολίων | Όχι (αποκλείστηκε σκόπιμα για την αποτροπή συσσώρευσης μεταδεδομένων) | Ναι (σχόλια #) | Ναι (σχόλια <!-- -->) | Ναι σε αρχεία .proto |
| Μέγεθος Ωφέλιμου Φορτίου Δικτύου | Συμπαγές κείμενο (πολύ υψηλή αναλογία gzip) | Συμπαγές κείμενο | Πολύλογο κείμενο (βαριά επανάληψη ετικετών) | Υπερ-συμπαγές δυαδικό |
Συνήθεις τρόποι καταστροφής δεδομένων και οδηγός ανάκτησης δεκαεξαδικών δεδομένων
SyntaxError: Unexpected token , in JSON at position X.
Βασική Αιτία: Τελικό κόμμα μετά το τελευταίο στοιχείο σε έναν πίνακα ή αντικείμενο, το οποίο απαγορεύεται αυστηρά στο RFC 8259 JSON.
Ανάκτηση: Αφαιρέστε τα τελικά κόμματα από τα κλειδιά αντικειμένων και τις καταχωρήσεις πινάκων πριν τα περάσετε στο JSON.parse().
SyntaxError: Unexpected token ' in JSON.
Βασική Αιτία: Αλφαριθμητικά ή κλειδιά περικλεισμένα σε μονά εισαγωγικά ('') αντί για διπλά εισαγωγικά ("").
Ανάκτηση: Αντικαταστήστε όλα τα αλφαριθμητικά και τα κλειδιά με μονά εισαγωγικά με τυπικά αλφαριθμητικά με διπλά εισαγωγικά.
Ανάλυση ασφάλειας και διανύσματα επίθεσης στον αναλυτή
Το JSON αποτελείται αποκλειστικά από κείμενο και είναι ασφαλές από την άμεση εκτέλεση κώδικα, αλλά η ανάλυση μη έμπιστου JSON μπορεί να οδηγήσει σε Μόλυνση Πρωτοτύπου (Prototype Pollution), ReDoS ή εξάντληση μνήμης.
Γνωστά διανύσματα επίθεσης
- Μόλυνση Πρωτοτύπου: Κλειδιά με ονομασία '__proto__' ή 'constructor' που τροποποιούν το Object.prototype σε εφαρμογές JavaScript.
- Άρνηση υπηρεσίας λόγω υπερχείλισης στοίβας μέσω βαθιά ένθετων δομών JSON (π.χ. 10.000 αγκύλες ανοίγματος).
- Απώλεια αριθμητικής ακρίβειας: Οι αριθμοί της JavaScript που είναι μεγαλύτεροι από 2^53 - 1 (9.007.199.254.740.991) χάνουν σιωπηρά την ακρίβειά τους.
Βέλτιστες αμυντικές πρακτικές: Ποτέ μην αξιολογείτε JSON με τη συνάρτηση eval(). Χρησιμοποιήστε το JSON.parse() και καθαρίστε τις ιδιότητες '__proto__' σε αναδρομικές συναρτήσεις συγχώνευσης αντικειμένων.
Ιστορική Αναδρομή & Ορόσημα
Κύρια Πλεονεκτήματα
- Αναγνώσιμη από τον άνθρωπο, αυτοεξηγούμενη και συνοπτική δομή κειμένου.
- Εγγενής υποστήριξη ανάλυσης ενσωματωμένη σε μηχανές JavaScript (JSON.parse) και σε κάθε κύρια γλώσσα προγραμματισμού.
- Η αυστηρή προδιαγραφή αποτρέπει την αυθαίρετη εκτέλεση κώδικα.
Τεχνικοί Περιορισμοί & Μειονεκτήματα
- Χωρίς υποστήριξη για σχόλια, τελικά κόμματα (trailing commas) ή κυκλικές αναφορές αντικειμένων.
- Χωρίς εγγενείς δυαδικούς τύπους (τα δυαδικά δεδομένα πρέπει να κωδικοποιηθούν σε base64, αυξάνοντας το μέγεθος κατά 33%).
- Αποτελεί αναποτελεσματική σειριοποίηση σε σύγκριση με δυαδικά μορφότυπα όπως τα Protocol Buffers ή το MessagePack.
Ενδιαφέροντα Τεχνικά Στοιχεία
- Ο Douglas Crockford πρόσθεσε τη ρήτρα άδειας λογισμικού 'Το Λογισμικό θα χρησιμοποιείται για το Καλό, όχι για το Κακό' στα αρχικά εργαλεία JSMin JSON.
- Το JSON είναι ένα αυστηρό υποσύνολο της σύνταξης της JavaScript, αλλά μέχρι το ES2019, οι ακατέργαστοι χαρακτήρες U+2028 και U+2029 χωρίς διαφυγή ήταν έγκυροι στο JSON αλλά άκυροι στα αλφαριθμητικά της JavaScript.
- Ο Douglas Crockford ανακάλυψε ότι τα πρώτα προγράμματα περιήγησης ιστού μπορούσαν να εκτελέσουν το JSON απευθείας σε αντικείμενα χρησιμοποιώντας την εγγενή συνάρτηση eval() της JavaScript προτού τα αποκλειστικά API JSON.parse() τυποποιηθούν στο ECMAScript 5.
Συχνές Τεχνικές Ερωτήσεις
Γιατί το JSON δεν επιτρέπει σχόλια;
Η γραμματική JSON δεν επιτρέπει σχόλια. Οι υλοποιήσεις ενδέχεται να διαφέρουν στον χειρισμό επεκτάσεων και δεδομένων ειδικών για κάθε εφαρμογή, επομένως η μορφή από μόνη της δεν εγγυάται διαλειτουργικότητα.
Πώς αποθηκεύετε ακέραιους αριθμούς 64-bit σε JSON χωρίς να χάσετε την ακρίβεια;
Ο εγγενής τύπος Number της JavaScript είναι ένας αριθμός κινητής υποδιαστολής διπλής ακρίβειας IEEE 754, ο οποίος υποστηρίζει ακέραιους αριθμούς μόνο έως το 2^53 - 1 με ακρίβεια. Οι ακέραιοι 64-bit (όπως τα αναγνωριστικά βάσης δεδομένων ή οι χρονικές σημάνσεις) πρέπει να σειριοποιούνται ως αλφαριθμητικά (π.χ. '1234567890123456789') στο JSON.
Ποια είναι η διαφορά μεταξύ JSON και NDJSON / JSON Lines;
Το τυπικό JSON περικλείει ολόκληρο το ωφέλιμο φορτίο σε ένα ενιαίο αντικείμενο ρίζας ή πίνακα, απαιτώντας από τους αναλυτές να φορτώσουν ολόκληρο το κείμενο πριν το αξιολογήσουν. Το NDJSON (Newline Delimited JSON) διαχωρίζει μεμονωμένες έγκυρες εγγραφές JSON με χαρακτήρες αλλαγής γραμμής (\n), επιτρέποντας την αποτελεσματική ροή γραμμή-προς-γραμμή τεράστιων συνόλων δεδομένων πολλών gigabyte.
Σχετικά ζεύγη μετατροπής για JSON
Η μετατροπή δεδομένων JSON σε πηγαίο κώδικα HTML μετατρέπει ακατέργαστα δομημένα ζεύγη κλειδιού-τιμής σε αναγνώσιμα από τον άνθρωπο έγγραφα ιστού έτοιμα για απόδοση από πρόγραμμα περιήγησης.
Η μετατροπή πηγαίου κώδικα HTML σε δεδομένα JSON μετατρέπει έγγραφα ιστού που είναι αναγνώσιμα από τον άνθρωπο σε δομημένα ζεύγη κλειδιού-τιμής για προγραμματιστική επεξεργασία και εισαγωγή API.
Η μετατροπή ενός αρχείου σεναρίου SQL Dump σε εξαγωγή δεδομένων JSON μετατρέπει τους άκαμπτους πίνακες σχεσιακών βάσεων δεδομένων σε ευέλικτα, ένθετα αντικείμενα για σύγχρονες εφαρμογές ιστού.
Η μετατροπή μη δομημένων αρχείων κειμένου JSON σε δομημένες σχεσιακές βάσεις δεδομένων SQLite επιτρέπει τη γρήγορη ευρετηρίαση και υποβολή ερωτημάτων σε μεγάλες εγγραφές δεδομένων.
Η μετατροπή αρχείων Adobe Swatch Exchange σε δομές JSON Χρωμάτων μετατρέπει δυαδικές παλέτες σχεδίασης σε αναγνώσιμα αντικείμενα κειμένου για σύγχρονες εφαρμογές ιστού.
Η μετατροπή δεδομένων κειμένου JSON Χρωμάτων σε δυαδικά δείγματα Adobe ASE γεφυρώνει τα διακριτικά σχεδίασης που βασίζονται στον ιστό και τις επαγγελματικές εφαρμογές διάταξης επιτραπέζιων υπολογιστών.
Η μετατροπή αρχείων κειμένου παλέτας GIMP σε δομές Color JSON επιτρέπει στις εφαρμογές ιστού να διαβάζουν δειγματοληψίες χρωμάτων απευθείας, χωρίς πολύπλοκα σενάρια ανάλυσης.
Η μετατροπή δομημένων αρχείων Color JSON σε μεταβλητές CSS μετατρέπει αντικείμενα ακατέργαστων δεδομένων σε εγγενείς ιδιότητες μορφοποίησης για ιστοσελίδες.