JSON Formatter ובדיקת תקינות
הדביקו JSON בשדה שלמעלה, וה-JSON Formatter הזה יבצע בדיקת תקינות JSON תוך כדי הקלדה. קלט תקין מוצג בעיצוב קריא עם ההזחה שבחרתם, או מכווץ לשורה אחת. קלט שגוי מקבל הודעת שגיאה מדויקת עם מספר השורה והעמודה, קטע מודגש מהשורה, ועבור הטעויות הנפוצות גם תיקון בלחיצה אחת. הכול רץ בדפדפן שלכם, כך שתגובות API, קובצי תצורה וקובצי ייצוא לא יוצאים מהמחשב.
מה ה-JSON Formatter הזה עושה
- עיצוב JSON (Beautify) עם 2 רווחים, 4 רווחים או טאבים. הפלט שומר על סדר המפתחות המקורי, אלא אם סימנתם מיון מפתחות.
- כיווץ JSON (Minify) על ידי הסרת כל הרווחים ומעברי השורה. מד הגודל מתחת לתוצאה מראה כמה בייטים חסכתם.
- בדיקת תקינות JSON בזמן אמת לפי RFC 8259, תקן ה-JSON הנוכחי. שורת הסטטוס הופכת לירוקה ברגע שהמסמך תקין.
- תיקון שגיאות נפוצות באופן אוטומטי: פסיקים מיותרים בסוף, מירכאות בודדות, מפתחות ללא מירכאות, הערות, ערכים בסגנון Python כמו
True,Noneו-NaN, ומספרים כמו.5או+1. - טעינת קבצים בעזרת הכפתור פתח קובץ או בגרירת קובץ
.jsonאל שדה הקלט. אחר כך אפשר להוריד את התוצאה או להחזיר אותה לקלט לסבב נוסף.
בדיקת תקינות JSON: למה הודעת השגיאה חשובה יותר מהצבע האדום
רוב הכלים המקוונים לבדיקת JSON רק אומרים שמשהו לא בסדר. גם הדפדפנים לא עוזרים הרבה: JSON.parse ב-Chrome מדווח Unexpected token } in JSON at position 148, ב-Firefox מופיע expected property name or '}', ואף אחד מהם לא אומר באיזו שורה לחפש. לכלי הזה יש מנתח (parser) משלו שזוכר איפה מתחיל כל אסימון. כשהוא נעצר, תקבלו את השורה והעמודה, קטע מאותה שורה עם סימן ^ מתחת לתו הבעייתי, ורמז בשפה פשוטה כמו כנראה חסר פסיק בין שני מאפיינים. הכפתור קפוץ לשגיאה מעביר את הסמן ישירות למיקום הזה בקלט.
הטעויות הנפוצות ביותר שאנחנו רואים במסמכים מודבקים:
| קלט | בעיה | JSON תקין |
|---|---|---|
{'name': 'Ada'} | מירכאות בודדות | {"name": "Ada"} |
{name: "Ada"} | מפתח ללא מירכאות | {"name": "Ada"} |
[1, 2, 3,] | פסיק מיותר בסוף | [1, 2, 3] |
{"a": 1 "b": 2} | חסר פסיק | {"a": 1, "b": 2} |
{"ok": True} | ליטרל של Python | {"ok": true} |
{"x": 007} | אפס מוביל | {"x": 7} או {"x": "007"} |
// comment | הערה | אסורה ב-JSON |
הכפתור תקן בשבילי מתקן את כל המקרים האלה, חוץ מהפסיק החסר והאפס המוביל. התיקון שמרני בכוונה: הוא אף פעם לא מנחש איפה צריך להיות פסיק חסר, כי פסיק במקום הלא נכון משנה את משמעות הנתונים, ו-007 יכול להיות המספר 7 או קוד. במקרים האלה תקבלו במקום זאת את המיקום המדויק.
מספרים גדולים, סדר מפתחות ודברים נוספים שבדרך כלל נשברים
פורמטרים רבים עובדים כך שהם קוראים ל-JSON.parse ואחר כך ל-JSON.stringify. הסבב הזה פוגע בנתונים בלי שתשימו לב. מזהה של Twitter או Snowflake כמו 1234567890123456789 חורג ממגבלת 2^53 של מספרים ב-JavaScript וחוזר בתור 1234567890123456800. הערך 1.0 הופך ל-1, ו-1e3 הופך ל-1000. ה-JSON Formatter הזה אף פעם לא ממיר מספרים לנקודה צפה. הוא מעתיק כל ליטרל בדיוק כפי שנכתב, כך שהפלט הוא עיצוב מחדש נאמן של הקלט ולא פרשנות חדשה שלו. אותו דבר חל על רצפי מילוט בתוך מחרוזות: "\u00e9" נשאר "\u00e9" ולא הופך ל-"é".
גם סדר המפתחות נשמר. לפי מפרט JSON האיברים באובייקט אינם מסודרים, אבל קובצי תצורה, נתוני בדיקה (fixtures) וסקירות קוד קריאים הרבה יותר כשהסדר יציב. אם אתם מעדיפים צורה קנונית, למשל כדי להשוות שתי תגובות API בכלי diff, הפעילו את מיון מפתחות ושני המסמכים יציגו את המאפיינים שלהם לפי סדר האלפבית בכל רמת קינון.
עיצוב JSON מול כיווץ JSON: מתי להשתמש בכל אחד
JSON מעוצב נועד לבני אדם. השתמשו בו כשאתם בודקים תגובת API, כותבים package.json, tsconfig.json או מסמך OpenAPI, או כשאתם שומרים fixtures במאגר קוד שבו כל שינוי צריך להופיע ב-diff בשורה משלו. שני רווחים הם המוסכמה בעולם ה-JavaScript, ארבעה רווחים נפוצים בפרויקטים של Python ו-.NET, וטאבים מאפשרים לכל קורא לבחור רוחב משלו.
JSON מכווץ (minified) נועד למכונות. רווחים תופסים בדרך כלל 20 עד 40 אחוז ממסמך מעוצב, כך שהסרתם מקטינה את הנתונים שנשלחים לדפדפנים, ערכים שנשמרים ב-Redis או בעמודה של מסד נתונים, ומאפייני data-* שמוטמעים ב-HTML. דחיסת gzip סוגרת חלק מהפער, אבל הגרסה המכווצת עדיין נדחסת לתוצאה קטנה יותר. מד הגודל מתחת לתוצאה מראה את ההבדל המדויק עבור המסמך שלכם.
עבודה עם JSON בטרמינל ובעורכי קוד
לקבצים שאתם מעבדים שוב ושוב, כלי שורת פקודה מהיר יותר מכל אתר. הפקודה jq . file.json מעצבת, jq -c . file.json מכווצת, ו-python -m json.tool file.json עובדת בכל מקום שבו מותקן Python. Visual Studio Code מעצב JSON בקיצור Shift+Alt+F ובודק אותו מול סכמה כשמוסיפים מאפיין $schema. הדף הזה נועד לשאר המקרים: תגובה שהועתקה מלשונית הרשת בכלי המפתחים, שורת לוג, קטע תצורה מוויקי, או בדיקה מהירה במחשב שאי אפשר להתקין עליו שום דבר.
כלים קשורים באתר: מקודד ומפענח Base64 מפענח את חלק הנתונים (payload) של JWT, שהוא JSON המקודד ב-Base64url. ממיר חותמת זמן UNIX הופך את מספרי createdAt שמופיעים ברוב תגובות ה-API לתאריכים קריאים, ומפענח UUID מראה את הגרסה ואת חותמת הזמן של מזהים בנתונים שלכם. כלים נוספים תמצאו בקטגוריה מפתחים.
שאלות נפוצות
האם ה-JSON שלי נשלח לשרת?
לא. הניתוח, העיצוב והתיקון רצים כולם בדפדפן שלכם ב-JavaScript. אחרי שהדף נטען אפשר לנתק את הרשת, והכלי ממשיך לעבוד. שום דבר לא נרשם ולא נשמר.למה בדיקת התקינות דוחה הערות, כשהעורך שלי מקבל אותן?
יוצר הפורמט, Douglas Crockford, הסיר את ההערות מ-JSON בכוונה, כדי שלא ישתמשו בפורמט להעברת הנחיות למנתח. קבצים כמוtsconfig.json או .vscode/settings.json הם מבחינה טכנית JSONC, הרחבה של JSON שעורכי קוד תומכים בה. מנתחים קפדניים בממשקי API, במסדי נתונים וברוב שפות התכנות דוחים אותם. כפתור התיקון מסיר את ההערות, כך שהתוצאה תקינה בכל מקום.
אפשר לעצב JSON Lines או כמה אובייקטים בבת אחת?
מסמך JSON מכיל ערך אחד בדיוק. אם תדביקו כמה אובייקטים המופרדים בפסיקים או במעברי שורה, בדיקת התקינות תיעצר בערך העודף הראשון. עטפו אותם בסוגריים מרובעים כדי ליצור מערך, ואז עצבו. כפתור התיקון לא עושה את זה אוטומטית, כי אין לו דרך לדעת אם הקלט נועד להיות מסמך אחד.מה הגודל המקסימלי?
אין מגבלה קבועה. מסמכים של כמה מגה-בייטים מתעצבים במחשב נייד בהרבה פחות משנייה. מעל 400 kB בערך הדגשת התחביר נכבית כדי שהדף יישאר מהיר, אבל העתקה והורדה ממשיכות לעבוד.האם מיון מפתחות משנה את הנתונים?
לא. אובייקטים ב-JSON אינם מסודרים מעצם הגדרתם, ראו את הערך JSON בוויקיפדיה, ולכן מנתח קורא את המסמך הממוין ואת המקורי כאותו ערך. מערכים אף פעם לא מסודרים מחדש, כי הסדר שלהם הוא חלק מהנתונים.איך עושים מילוט ל-JSON כדי להטמיע אותו בתוך מחרוזת?
קודם כווצו, ואז הוסיפו מילוט לכל לוכסן הפוך ולכל מירכאה כפולה. שפות רבות עושות את זה ישירות:JSON.stringify(JSON.stringify(obj)) ב-JavaScript או json.dumps(json.dumps(obj)) ב-Python מחזירים מחרוזת JSON שמכילה את טקסט ה-JSON.