פורמט JSON

פורמט JSON

פורמט JSON

JSON זהו פורמט חילופי נתונים מבוסס טקסט, כלומר קל לקריאה עבור אדם וגם עבור תוכנית. שמו תואם את ראשי התיבות באנגלית של סימון אובייקט JavaScript והוא סטנדרטי כ ECMA-404. למרות שזה פורמט קרוב מאוד בתחביר אליו JavaScript, מכיוון שקל מאוד לעבד אותו כדי לקודד נתוני אובייקט או להשיג אותם, הוא משמש גם בשפות תכנות רבות אחרות (C, C + +, Java, פיתון...) כחלופה, למשל, ל-XML, שיש לו מטרה דומה, אך מכיוון שהוא כולל יותר מטא-מידע, הוא דורש יותר טקסט ולכן תופס יותר מקום, צורך יותר רוחב פס ודורש יותר משאבים לקידוד ופענוח המידע שהוא מכיל. JSON.

תוכן עניינים

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

    קווי מתאר של התחביר של אובייקט בפורמט JSON

    שמות מאפיינים חייבים להיות מוקפים במרכאות באמצעות מרכאות כפולות (למרות שחלק מהמנתחים יתמכו במירכאות בודדות), ולמרות שכמה תווים מיוחדים מותרים לשמות (כגון סימני הדגשה), לא מומלץ להימנע מהקריטריונים של חלק מהמנועי ניתוח ולעשות הימנע מהתנגשויות בעת שימוש בנכס במיוחד עם תחביר dot(object.property).

    בדוגמה למעלה ניתן לראות אובייקט בעל שישה מאפיינים עם ערכים פשוטים, מספריים, בוליאניים או טקסטים; אלא בפורמט JSON, מאפיינים יכולים גם לרכוש כערך אובייקט (כולל "אובייקט מיוחד" null) או מערך בנוסף למחרוזת טקסט (טקסט במירכאות), מספר (בפורמטים שונים) או ערך בוליאני (true או false ).

    כמו בשפה JavaScript (JSON הוא תת-קבוצה של JavaScript) כדי לבטא מטריצה, ערכיה מוקפים בסוגריים מרובעים ומופרדים בפסיקים. המקרה הפשוט ביותר מודגם בדוגמה שלהלן; זהו מערך חד מימדי, וקטור, המורכב מערכים מספריים.

    En JavaScript אין צורך שכל הרכיבים של מערך יהיו מאותו סוג; לדוגמה, ניתן לערבב מחרוזות טקסט וערכים מספריים. וקטור, מערך חד-ממדי, יכול להיות גם אחד המרכיבים של מערך אחר, המאפשר לבנות מערכים רב-ממדיים באורכים משתנים. הדוגמה הבאה מציגה אובייקט בעל שלושה מאפיינים: הראשון מערך דו מימדי של אורכים קבועים, השני אורכים משתנים, והשלישי נוצר על ידי מערך עם ערכים מסוגים שונים.

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

    בדיוק כמו שזה קורה עם JavaScript, קודי בריחה משמשים לכלול תווים מסוימים בתוך מחרוזת טקסט. הדרך הגנרית ביותר היא להשתמש בקודי Unicode המובעים עם סרגל המילוט, האות u וארבע ספרות הקסדצימליות עם הפורמט "\u263A" להתייחס ל☺ למשל.

    תווי התקן, הקיימים ברוב השפות (בדומה ל-C) הם הבאים

    • נרתע \b ³ CA אומר ASCII 8 (0x08)
    • טבלאטור \t ³ CA אומר ASCII 9 (0x09) הוא מיוצג בדרך כלל כ-HT (טבולטור אופקי)
    • שורה חדשה \n ³ CA אומר ASCII 10 (0x0A) הוא מיוצג בדרך כלל כ-LF (הזנת שורה)
    • דף חדש \f ³ CA אומר ASCII 12 (0x0C) מיוצג בדרך כלל כ-FF (הזנת טופס)
    • חזור \r ³ CA אומר ASCII 13 (0x0D) הוא מיוצג בדרך כלל כ-CR (החזרת כרכרה)
    • מרכאות \" ³ CA אומר ASCII 34 (0x22)
    • פס מפוצל \/ ³ CA אומר ASCII 57 (0x2F)
    • מַהֲלָך סְרָק \\ ³ CA אומר ASCII 134 (0x5C)
    • קוד יוניקוד \uXXXX

    נגזר מ C (וקשורה ל יוניקס וכדומה, כגון גנו / לינוקס) סוף השורה מיוצג בדרך כלל עם \n והוא זה שיש לבחור בו JSON אבל מעניין לזכור שמערכות הפעלה מסוימות מעדיפות חלופות אחרות. Windows מייצג בדרך כלל עם \r\n סיומת שורה ו-Mac OS (לפני מערכת ההפעלה \r

    לגבי הפורמט המספרי, ההתייחסות היא גם JavaScript. המפריד העשרוני הוא הנקודה, המקף (ASCII 45 0x2D) משמש כסימן שלילי וה- סימון בצורה אקספוננציאלית (סימון מדעי) שימושים E כאינדיקטור (שיכול להיות אותיות רישיות או קטנות)

    כפי שאמרתי בהתחלה, כדי להשתמש בנתונים שיתקבלו כטקסט, לשפות התכנות השונות יש פונקציות ניתוח והקצאה. הדוגמה הבאה מראה כיצד הם ישמשו ב JavaScript. כדי להיות מסוגל להשתמש בו ממסוף, הקצאת הנתונים כלולה JSON כדי למנוע שגיאות אפשריות בהתאם לתקן ECMA המשמש את המתורגמן JavaScript הקצאת האובייקט מתבצעת JSON בשורה אחת. מהדורה 6 של 2016 (ECMA-262) תומך במחרוזות מרובות שורות, מהדורה 5 (עד 2011) צריכה להוסיף קוד בריחה \ ובקודמים יש לפתור את זה ביד או להשתמש בשורה בודדת.

    אזהרה לא לבלבל משתמשים חדשים פנימה JavaScript. בתוך הקוד JavaScript אין צורך להשתמש במחרוזת טקסט ליצירת אובייקט, בדוגמה הקודמת היא משמשת כדי לדמות נתונים המגיעים, למשל, משרת. כדי להקצות אובייקט למשתנה, משהו כמו:

    ניתן להמיר את האובייקט הזה לטקסט, למשל, באמצעות הפונקציה stringify כדלהלן:

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

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

    לפרסם תגובה

    אולי פספסת