Δεδομένα JSON (.json)

RFC Τυπικό

Το JavaScript Object Notation (JSON) είναι μια ελαφριά, ευανάγνωστη από τον άνθρωπο μορφή κειμένου για την ανταλλαγή δεδομένων, η οποία υποστηρίζεται από πολλές γλώσσες προγραμματισμού και χρησιμοποιείται συχνά σε API ιστού.

Μετατροπή JSON σε HTML

Δωρεάν μετατροπέας από JSON σε HTML εντός του προγράμματος περιήγησης. Μετατρέψτε αρχεία άμεσα στη συσκευή σας.

Συμπίεση JSON στο διαδίκτυο

Ιδιωτικά - τα αρχεία δεν φεύγουν ποτέ από τη συσκευή σας

Επιθεώρηση & Μεταδεδομένα

Τα λειτουργικά συστήματα και τα εργαλεία ανάλυσης αρχείων αναγνωρίζουν τα αρχεία JSON ελέγχοντας την αρχική δυαδική ακολουθία byte:

Επιλέξτε ή αποθέστε αρχεία εδώ

Ιδιωτικά - τα αρχεία δεν φεύγουν ποτέ από τη συσκευή σας

ή επικόλληση Ctrl+V
Εγγύηση Απορρήτου Μηδενικής Μετάδοσης Δικτύου: Δεν μεταφορτώνεται κανένα 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 (Τρέχον)YAMLXMLProtocol 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__' σε αναδρομικές συναρτήσεις συγχώνευσης αντικειμένων.

Ιστορική Αναδρομή & Ορόσημα

2017Το RFC 8259 τυποποιεί το UTF-8 ως την αποκλειστική υποχρεωτική κωδικοποίηση χαρακτήρων για το JSON.
2013Το ECMA-404 ορίζει τη σύνταξη JSON, η οποία χρησιμοποιείται από πολλές γλώσσες προγραμματισμού και πλατφόρμες.
2001Ο Douglas Crockford καθορίζει το JSON για να επιτρέψει την επικοινωνία δεδομένων χωρίς κατάσταση (stateless) μεταξύ προγράμματος περιήγησης και διακομιστή.

Κύρια Πλεονεκτήματα

  • Αναγνώσιμη από τον άνθρωπο, αυτοεξηγούμενη και συνοπτική δομή κειμένου.
  • Εγγενής υποστήριξη ανάλυσης ενσωματωμένη σε μηχανές 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

Η μετατροπή δεδομένων JSON σε πηγαίο κώδικα HTML μετατρέπει ακατέργαστα δομημένα ζεύγη κλειδιού-τιμής σε αναγνώσιμα από τον άνθρωπο έγγραφα ιστού έτοιμα για απόδοση από πρόγραμμα περιήγησης.

HTML σε JSON

Η μετατροπή πηγαίου κώδικα HTML σε δεδομένα JSON μετατρέπει έγγραφα ιστού που είναι αναγνώσιμα από τον άνθρωπο σε δομημένα ζεύγη κλειδιού-τιμής για προγραμματιστική επεξεργασία και εισαγωγή API.

SQL σε JSON

Η μετατροπή ενός αρχείου σεναρίου SQL Dump σε εξαγωγή δεδομένων JSON μετατρέπει τους άκαμπτους πίνακες σχεσιακών βάσεων δεδομένων σε ευέλικτα, ένθετα αντικείμενα για σύγχρονες εφαρμογές ιστού.

JSON σε SQLITE

Η μετατροπή μη δομημένων αρχείων κειμένου JSON σε δομημένες σχεσιακές βάσεις δεδομένων SQLite επιτρέπει τη γρήγορη ευρετηρίαση και υποβολή ερωτημάτων σε μεγάλες εγγραφές δεδομένων.

ASE σε JSON

Η μετατροπή αρχείων Adobe Swatch Exchange σε δομές JSON Χρωμάτων μετατρέπει δυαδικές παλέτες σχεδίασης σε αναγνώσιμα αντικείμενα κειμένου για σύγχρονες εφαρμογές ιστού.

JSON σε ASE

Η μετατροπή δεδομένων κειμένου JSON Χρωμάτων σε δυαδικά δείγματα Adobe ASE γεφυρώνει τα διακριτικά σχεδίασης που βασίζονται στον ιστό και τις επαγγελματικές εφαρμογές διάταξης επιτραπέζιων υπολογιστών.

GPL σε JSON

Η μετατροπή αρχείων κειμένου παλέτας GIMP σε δομές Color JSON επιτρέπει στις εφαρμογές ιστού να διαβάζουν δειγματοληψίες χρωμάτων απευθείας, χωρίς πολύπλοκα σενάρια ανάλυσης.

JSON σε CSS

Η μετατροπή δομημένων αρχείων Color JSON σε μεταβλητές CSS μετατρέπει αντικείμενα ακατέργαστων δεδομένων σε εγγενείς ιδιότητες μορφοποίησης για ιστοσελίδες.