מה זה JSON? פורמט טוב יותר להחלפת נתונים

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

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

הפופולריות של JSON הביאה גם לתמיכה מקורית ב- JSON על ידי מסדי נתונים רבים. מאגרי מידע יחסיים כמו PostgreSQL ו- MySQL נשלחים כעת עם תמיכה מקורית לאחסון ושאילתת נתוני JSON. מאגרי מידע NoSQL כמו MongoDB ו- Neo4j תומכים גם ב- JSON, אם כי MongoDB משתמש בגרסה בינארית קצת שונה של JSON מאחורי הקלעים.

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

דוגמה ל- JSON

הנה דוגמה לנתונים המקודדים ב- JSON:

{

  "FirstName": "ג'ונתן",

  "LastName": "פרימן",

  "LoginCount": 4,

  "IsWriter": נכון,

  "WorksWith": ["קבוצת טכנולוגיות Spantree", ""],

  "חיות מחמד": [

    {

      "שם": "לילי",

      "סוג": "דביבון"

    }

  ]

}

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

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

קבצי JSON

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

מדוע עלי להשתמש ב- JSON? 

כדי להבין את התועלת והחשיבות של JSON, נצטרך להבין קצת את ההיסטוריה של האינטראקטיביות באינטרנט. 

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

מכיוון שהטענות לעמוד מלא היו יקרות, מפתחי אתרים חיפשו טכנולוגיות חדשות יותר כדי לשפר את חוויית המשתמש הכוללת. בינתיים, היכולת להגיש בקשות אינטרנט ברקע בזמן שהוצג דף, שהוצג לאחרונה ב- Internet Explorer 5, הוכיחה את עצמה כגישה קיימא לטעינת נתונים באופן הדרגתי לתצוגה. במקום לטעון מחדש את כל תוכן הדף, לחיצה על כפתור הרענון תפעיל בקשת אינטרנט שתיטען ברקע. עם טעינת התוכן ניתן היה לטפל בנתונים, לשמור אותם ולהציג אותם בדף באמצעות JavaScript, שפת התכנות האוניברסלית בדפדפנים.

מנוחה לעומת סבון: חיבור JSON

במקור, נתונים אלו הועברו בפורמט XML (ראה דוגמה למטה) באמצעות פרוטוקול העברת הודעות בשם SOAP (Simple Object Access Protocol). אבל XML היה מילולית וקשה לניהול ב- JavaScript. ל- JavaScript כבר היו אובייקטים, שהם דרך להביע נתונים בתוך השפה, אז דאגלס קרוקפורד לקח תת-קבוצה של הביטוי הזה כמפרט לפורמט חדש של החלפת נתונים וכינה אותו JSON. JSON היה הרבה יותר קל לאנשים לקרוא ולדפדפנים לנתח.

במהלך שנות ה- 00, טכנולוגיית שירותי אינטרנט אחרת, שנקראה העברת מדינת ייצוג, או REST, החלה לעקוף את SOAP לצורך העברת נתונים. אחד היתרונות הגדולים של תכנות באמצעות ממשקי API של REST הוא שאתה יכול להשתמש בפורמטי נתונים מרובים - לא רק XML, אלא גם JSON ו- HTML. מכיוון שמפתחי אתרים העדיפו את JSON על פני XML, כך גם באו להעדיף את REST על פני סבון. כפי שהגדיר זאת קוסטיאנטין חרצ'נקו בבלוג סוויטלה, "במובנים רבים, ההצלחה של REST נובעת ממתכונת JSON בגלל השימוש הקל שלה בפלטפורמות שונות."

כיום JSON הוא הסטנדרט דה-פקטו להחלפת נתונים בין לקוחות אינטרנט ומובייל ושירותי Back-end. 

JSON לעומת XML

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

  ג'ונתן

  פרימן

  4

  נָכוֹן

    קבוצת טכנולוגיות Spantree

      לילי

      דביבון

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

מגבלות JSON

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

  1. אין סכמה. מצד אחד, זה אומר שיש לך גמישות מוחלטת לייצג את הנתונים בכל דרך שתרצה. מצד שני, זה אומר שאתה יכול בטעות ליצור נתונים מעוצבים בקלות רבה.
  2. סוג מספר אחד בלבד: פורמט הנקודה הצפה של IEEE-754. זה די פה, אבל זה פשוט אומר שאתה לא יכול לנצל את סוגי המספרים המגוונים והניואנסים הקיימים בשפות תכנות רבות.
  3. אין סוג תאריך. השמטה זו פירושה שמפתחים חייבים לנקוט שימוש בייצוג מחרוזת של תאריכים, מה שמוביל לאי התאמות בעיצוב, או שעליהם לייצג תאריכים בצורה של אלפיות השנייה מאז התקופה (1 בינואר 1970).
  4. אין תגובה. זה לא מאפשר להוסיף הערות לשדות, דבר הדורש תיעוד נוסף ומגדיל את הסבירות לאי הבנה.
  5. מֶלֶל. בעוד JSON פחות מילולית מ- XML, זה לא הפורמט התמציתי ביותר של מחלף נתונים. עבור שירותים בעלי נפח גבוה או מטרה מיוחדת, תרצה להשתמש בפורמטי נתונים יעילים יותר.

מתי עלי להשתמש ב- JSON?

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

במקרה של תקשורת בין שרת לשרת, אולי עדיף לך להשתמש במסגרת סדרת סדרה כמו Apache Avro או Apache Thrift. JSON אינה בחירה גרועה כאן, ועדיין עשויה להיות בדיוק מה שאתה צריך, אך התשובה אינה ברורה כמו לתקשורת אינטרנט ונייד.

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

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

מנתח JSON

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

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

אתר json.org כולל רשימה מקיפה של ספריות קוד בהן תוכלו להשתמש כדי לנתח, ליצור ולבצע מניפולציות ב- JSON, בשפות מגוונות כמו Python, C # ו- COBOL.

כלי עזר של JSON

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

  • מעצב JSON: JSONLint יפרמט ויאמת קוד JSON שרירותי.
  • מציג JSON: ל- Stack.hu אתר שייצור עץ אינטראקטיבי שיעזור לך להבין את מבנה קוד ה- JSON שלך. 
  • JSON Beautifier: אם אתה רוצה "להדפיס" את קוד JSON שלך, עם צבע תחביר וכדומה, Prettydiff יכולה לעזור לך. 
  • ממיר JSON: צריך להעביר במהירות נתונים מתבנית JSON למשהו אחר? ל- Convertcsv.com כלים שיכולים להמיר את JSON ל- CSV (שאותם ניתן לפתוח ב- Excel) או ל- XML.

מדריך JSON

מוכנים לצלול וללמוד עוד על אופן העבודה עם JSON ביישומים האינטראקטיביים שלכם? לרשת המפתחים של מוזילה יש הדרכה נהדרת שתתחיל לעבוד עם JSON ו- JavaScript. אם אתה מוכן לעבור לשפות אחרות, עיין במדריך לשימוש ב- JSON עם Java (מ- Baeldung), עם Python (מ- DataCamp) או עם C # (מהעזרה לבדיקת תוכנה). בהצלחה!

ג'וש פרולינגר תרם למאמר זה.