נתוני JSON (.json)

RFC תקן

JavaScript Object Notation (JSON) הוא פורמט טקסט קל משקל וקריא לאדם להחלפת נתונים. שפות תכנות רבות תומכות בו, והוא נפוץ בממשקי API ברשת.

המר JSON ל-HTML

ממיר חינמי מ-JSON ל-HTML פועל בדפדפן. המר קבצים באופן מיידי במכשיר שלך.

כיווץ JSON אונליין

פרטי - הקבצים לעולם אינם עוזבים את המכשיר שלך

בדיקה ומטא-נתונים

מערכות הפעלה ומנתחי קבצים מזהים קבצי JSON על ידי בדיקת רצף הבייטים הבינארי הראשוני:

בחר או גרור קבצים לכאן

פרטי - הקבצים לעולם אינם עוזבים את המכשיר שלך

או הדבק Ctrl+V
הבטחת פרטיות ללא העברת נתונים ברשת: 0 בייט הועלו לשרתים חיצוניים. כל העיבוד התבצע באופן מקומי בארגז החול של הדפדפן שלך.

חתימת כותרת ברמת הבייט (Magic Bytes)

מערכות הפעלה ומנתחי קבצים מזהים קבצי JSON על ידי בדיקת רצף הבייטים הבינארי הראשוני:

חתימת HEX (היסט 0):

7B או 5B

ייצוג ASCII: { or [

תקינה: RFC 8259 / ECMA-404 / ISO/IEC 21778

מפרט טכני

מבנה המכולהפורמט החלפת נתונים קל משקל, מבוסס טקסט, בלתי תלוי בשפה
דחיסהGzip,‏ Brotli ו-Zstandard יכולים לדחוס טקסט JSON; גודל התוצאה תלוי בנתונים ובהגדרות.
סדר בתים (Endianness)Unicode מקודד ב-UTF-8 (מומלץ ללא סימן סדר בייטים / BOM)
מרחבי צבעלא ישים
ערוצים ומבנהשישה טיפוסי נתונים בסיסיים: אובייקט (object), מערך (array), מחרוזת (string), מספר (number), בוליאני (boolean) ו-null
ממדים מרבייםבלתי מוגבל; מוגבל אך ורק על ידי זיכרון המפענח ואורך המחרוזת המקסימלי
שקיפותלא ישים
הזרמה ופרוגרסיביותNDJSON (Newline Delimited JSON) / JSON Lines מאפשרים עיבוד זרמים מדורג

מטריצת השוואה טכנית: JSON מול מתחרים

תכונה טכניתJSON (נוכחי)YAMLXMLProtocol Buffers
מורכבות תחביריתמינימלית (6 סוגים, תחביר קפדני)גבוהה (מבוססת הזחות, מפרט מורכב)גבוהה (תגי סגירה מסורבלים, מרחבי שמות)פורמט העברה בינארי המוגדר באמצעות סכימה
ביצועי פענוחמהיר במיוחד בכל השפות המודרניותאיטי (פענוח מורכב של הזחות)בינוניים עד איטיים (בניית DOM כבדה)מהיר במיוחד (פענוח בינארי ללא העתקה)
תמיכה בהערותלא (הושמטו במכוון כדי למנוע תפיחה של המטא-נתונים)כן (הערות #)כן (הערות <!-- -->)כן בקובצי .proto
גודל המטען ברשתטקסט קומפקטי; תוצאות הדחיסה תלויות בנתונים ובהגדרותטקסט קומפקטיטקסט ארוך (חזרתיות רבה של תגים)בינארי קומפקטי במיוחד

מצבי השחתה נפוצים ומדריך שחזור הקסדצימלי (Hex)

שגיאת תחביר (SyntaxError): אסימון בלתי צפוי , ב-JSON במיקום X.

גורם שורש: פסיק נגרר לאחר הפריט האחרון במערך או באובייקט, דבר אסור לחלוטין לפי תקן RFC 8259 JSON.

שחזור: הסר פסיקים נגררים אחרי מפתחות באובייקטים ואחרי פריטים במערכים לפני העברת הטקסט ל-JSON.parse().

שגיאת תחביר (SyntaxError): אסימון בלתי צפוי ' ב-JSON.

גורם שורש: מחרוזות או מפתחות המוקפים במרכאות בודדות ('') במקום במרכאות כפולות ("").

שחזור: החלף את כל המחרוזות והמפתחות המוקפים במרכאות בודדות במרכאות כפולות תקניות.

ניתוח אבטחה ווקטורי תקיפה נגד מנתחי פורמטים (parsers)

JSON מכיל טקסט בלבד ואינו מאפשר הרצת קוד ישירה, אך פענוח JSON ממקור בלתי מהימן עלול להוביל לזיהום אבטיפוס (Prototype Pollution), למתקפות ReDoS או למיצוי זיכרון.

ווקטורי תקיפה ידועים

  • זיהום אבטיפוס (Prototype Pollution): מפתחות בשם '__proto__' או 'constructor' שמשנים את Object.prototype ביישומי JavaScript.
  • מתקפת מניעת שירות באמצעות גלישת מחסנית שנגרמת ממבני JSON מקוננים מאוד (לדוגמה, 10,000 סוגריים פותחים).
  • אובדן דיוק במספרים: מספרי JavaScript הגדולים מ-2^53 - 1 (9,007,199,254,740,991) מאבדים דיוק בלי שהדבר מדווח.

שיטות מומלצות להגנה: לעולם אל תעבד JSON באמצעות eval(). השתמש ב-JSON.parse() ונקה מאפייני '__proto__' בפונקציות רקורסיביות למיזוג אובייקטים.

היסטוריה ואבני דרך

2017RFC 8259 מתקנן את UTF-8 כקידוד התווים היחיד המחייב עבור JSON.
2013ECMA-404 מגדיר את תחביר JSON, שבו משתמשות שפות תכנות ופלטפורמות רבות.
2001דאגלס קרוקפורד (Douglas Crockford) מגדיר את JSON כדי לאפשר תקשורת נתונים ללא מצב (stateless) בין הדפדפן לשרת.

יתרונות מרכזיים

  • מבנה טקסט קריא לאדם, בעל תיאור עצמי ותמציתי.
  • תמיכה מובנית בניתוח (parsing) המוטמעת במנועי JavaScript (JSON.parse) ובכל שפת תכנות מרכזית.
  • מפרט קפדני המונע הרצת קוד שרירותית.

מגבלות טכניות וחסרונות

  • אין תמיכה בהערות, פסיקים נגררים (trailing commas), או הפניות מעגליות לאובייקטים.
  • אין טיפוסי נתונים בינאריים מקוריים (נתונים בינאריים חייבים להיות מקודדים ב-base64, מה שמגדיל את הנפח ב-33%).
  • סריאליזציה לא יעילה בהשוואה לפורמטים בינאריים כמו Protocol Buffers או MessagePack.

עובדות טכניות מעניינות

  • דאגלס קרוקפורד הוסיף את סעיף רישיון התוכנה 'התוכנה תשמש לטוב ולא לרעה' לכלי ה-JSMin JSON המקוריים.
  • JSON הוא תת-קבוצה קפדנית של תחביר JavaScript, אך עד ES2019 תווים גולמיים שלא עברו escape מסוג U+2028 ו-U+2029 היו תקפים ב-JSON אך לא תקפים במחרוזות JavaScript.
  • דאגלס קרוקפורד גילה שדפדפני אינטרנט מוקדמים יכלו להמיר JSON ישירות לאובייקטים באמצעות eval() המקורית של JavaScript, לפני שממשקי ה-API הייעודיים JSON.parse() תוקננו ב-ECMAScript 5.

שאלות טכניות נפוצות

מדוע JSON אינו מתיר הערות?

התחביר של JSON אינו מתיר הערות. מימושים עשויים לטפל בהרחבות ובנתונים ייחודיים ליישום בדרכים שונות, ולכן הפורמט לבדו אינו מבטיח פעולה הדדית.

כיצד מאחסנים מספרים שלמים (integers) בני 64 ביט ב-JSON מבלי לאבד דיוק?

טיפוס Number המקורי של JavaScript הוא מספר נקודה צפה בדיוק כפול לפי IEEE 754, התומך בייצוג מדויק רק של מספרים שלמים עד 2^53 - 1. מספרים שלמים בני 64 ביט (כמו מזהי מסד נתונים או חותמות זמן) חייבים להיות מסודרים כמחרוזות (למשל '1234567890123456789') ב-JSON.

מה ההבדל בין JSON לבין NDJSON / JSON Lines?

JSON רגיל עוטף מטען שלם באובייקט שורש יחיד או במערך יחיד, מה שמחייב מפענחים לטעון את כל הטקסט לפני פענוחו. NDJSON (Newline Delimited JSON) מפריד בין רשומות JSON תקינות באמצעות תווי שורה חדשה (\n), וכך מאפשר הזרמה חסכונית בזיכרון, שורה אחר שורה, של מערכי נתונים ענקיים בגודל של מספר ג'יגה-בייט.

זוגות המרה קשורים ל-JSON

JSON אל HTML

המרת נתוני JSON לקוד מקור HTML הופכת זוגות מפתח-ערך מובנים וגולמיים למסמכי אינטרנט קריאים לבני אדם המוכנים להצגה בדפדפן.

HTML אל JSON

המרת קוד מקור HTML לנתוני JSON הופכת מסמכי אינטרנט קריאים לבני אדם לזוגות מפתח-ערך מובנים לעיבוד פרוגרמטי וקליטה ב-API.

SQL אל JSON

המרת סקריפט טקסטואלי של גיבוי SQL לפורמט JSON הופכת טבלאות מסד נתונים יחסי נוקשות לאובייקטים גמישים ומקוננים עבור יישומי אינטרנט מודרניים.

JSON אל SQLITE

המרת קבצי טקסט JSON לא מובנים למסדי נתונים יחסיים מובנים של SQLite מאפשרת אינדוקס ושאילתות מהירים של רשומות נתונים גדולות.

ASE אל JSON

המרת קבצי Adobe Swatch Exchange לאובייקטי JSON של צבעים מתרגמת פלטות עיצוב בינאריות לאובייקטי טקסט קריאים עבור יישומי אינטרנט מודרניים.

JSON אל ASE

המרת נתוני טקסט של צבעי JSON לדגימות בינאריות מסוג Adobe ASE מגשרת בין אסימוני עיצוב מבוססי אינטרנט לבין יישומי פריסה שולחניים מקצועיים.

GPL אל JSON

המרת קובצי טקסט של פלטות GIMP למבני Color JSON מאפשרת ליישומי אינטרנט לקרוא דגימות צבע ישירות ללא סקריפטים מורכבים לניתוח.

JSON אל CSS

המרת קבצי JSON מובנים של צבעים למשתני CSS הופכת אובייקטי נתונים גולמיים למאפייני עיצוב מקוריים עבור אתרי אינטרנט.