JSON Toolkit

null או השמטת השדה

שורה תחתונה: `null` אומר שהשדה קיים בלי ערך; השמטה אומרת שהשדה לא קיים. גופי PATCH, מיזוג קונפיגורציה ומילוי מוקדם של טפסים הם המקומות שבהם ההבדל נושך.

בינוניכ-3 דקות קריאהפורסם 2026-10-30עודכן 2026-10-30
ההבדל הסמנטי בין null לשדה חסר

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

ההבדל

{ "nickname": null }

קיים, ריק. הצרכן יודע שהשדה נוקה במפורש.

{ }

חסר. הצרכן לא יכול להבדיל בין "מעולם לא הוגדר" ל"לא נתמך".

ב-JavaScript ההבחנה מוחשית:

'nickname' in obj          // false — absent
obj.nickname === null      // true  — present and null
obj.nickname === undefined // true  — both cases

איפה זה חשוב

גופי PATCH. {"nickname": null} מנקה את הכינוי. {} לא משנה כלום. אם ה-handler מתייחס ל-"null" ול"חסר" כאל אותו דבר, משתמשים לעולם לא יוכלו לנקות את השדה — הם יכולים רק להגדיר מחרוזת ריקה, וזה דבר אחר.

ממשו לפי נוכחות מפתח, לא לפי ערך:

if (Object.hasOwn(patch, 'nickname')) {
  target.nickname = patch.nickname;   // null allowed
}

מיזוג קונפיגורציה. השמטה יורשת את ברירת המחדל; null משבית אותה במפורש. כך בדיוק מתנהגים הערכים של Helm ו-Kubernetes.

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

מוסכמות

מצב מוסכמה
גופי תגובה שמרו null; צורה יציבה, טיפוסים פשוטים יותר
בקשות PATCH null מנקה, השמטה משמרת
PUT (החלפה מלאה) השמטה פירושה מחיקה — המסמך כולו מוחלף
מיזוג קונפיגורציה השמטה = ברירת מחדל, null = מושבת
מסד נתונים null ללא ידוע או לא רלוונטי; '' לריק ידוע

שמרו על צורות תגובה יציבות. רשימה שבה חלק מהפריטים נושאים avatar ואחרים לא מחייבת בדיקת 'avatar' in item בכל אתר קריאה. avatar: null נוח יותר לצריכה.

שלושה דברים לא לעשות

אל תשתמשו ב-"" במקום null. כינוי ריק וכינוי לא מוגדר הם מצבים שונים ברוב התחומים.

אל תשתמשו ב-0 או -1 כערכי sentinel. אפס הוא מספר לגיטימי, וה-sentinel מקלקל כל ממוצע שאתם מחשבים.

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

שאלות ותשובות

מה מכריע בין null לשדה מושמט?

שאלו אם הצרכן צריך להבדיל בין "נוקה במפורש" ל"מעולם לא הוגדר". בגוף PATCH הוא חייב, כך ש-null מנקה והיעדר משמר; בתגובות, שמירה על null הופכת את הצורה ליציבה ואת טיפוסי הלקוח לפשוטים יותר.

איך נקודת קצה של PATCH מבדילה בין ניקוי לבין אי-נגיעה?

בדקו נוכחות מפתח, לא את הערך: Object.hasOwn(patch, 'nickname') אומר לכם שהשדה נשלח, ורק אז הקצו אותו, כולל null. אם ה-handler מתייחס ל-null ולחסר כאל אותו דבר, משתמשים לעולם לא יוכלו לנקות את השדה ויוכלו רק לחזור למחרוזת ריקה.

למה גופי תגובה צריכים לשמר null?

צורה יציבה אומרת שלקוחות לא צריכים בדיקת 'avatar' in item לכל מפתח אופציונלי. כשחלק מפריטי הרשימה נושאים avatar ואחרים משמיטים אותו, הבדיקה הזו משוכפלת בכל אתר קריאה וקל לטעות בה.

קריאה נוספת