در خروجی ساختاریافته مدل، null، نبودن یک کلید و رشته خالی سه وضعیت متفاوتاند. اگر همه را «اطلاعات نداریم» بخوانیم، ممکن است برنامه مقدار قبلی را پاک کند یا داده ساختگی بسازد. این راهنما درباره معنای مقدار ناموجود و قرارداد مصرفکننده است؛ صحت قالب JSON بهتنهایی چنین قراردادی را تعیین نمیکند.
اول معنی را تعیین کنیم، بعد schema را
در قرارداد آموزشی زیر، «فیلد غایب» یعنی تولیدکننده درباره آن چیزی گزارش نکرده است؛ null یعنی مقدار بررسی شده اما معلوم نیست؛ متن خالی ورودی قابل قبول نیست. این معنیها انتخاب طراحی همین مثالاند، نه رفتار پیشفرض همه APIها. اگر سرویس مقصد null را دستور پاککردن میداند، نباید این قرارداد را مستقیم به آن فرستاد. یک لایه تبدیل باید وضعیت «نامعلوم» را بدون تغییر رکورد به صف بررسی بفرستد.
جدول تصمیم با پنج ورودی
| خروجی آموزشی | تفسیر در این قرارداد | اقدام مصرفکننده |
|---|---|---|
{} | فیلد گزارش نشده | ورودی ناقص؛ رکورد قبلی ثابت بماند |
{"answer":null} | بررسی شده، پاسخ نامعلوم | ارجاع برای بررسی؛ پاسخ جعلی ساخته نشود |
{"answer":""} | رشته خالی | رد اعتبارسنجی متن |
| رشته شامل فقط فاصله | از نظر کاربرد، بدون پاسخ | پس از بررسی فاصلهها رد شود |
| رشته «نامشخص» | یک متن عادی، نه null | طبق قرارداد معنا بررسی شود |
schema کدام بخش را کنترل میکند؟
برای نمونه، این schema حضور answer را لازم میکند و null یا رشته غیرخالی را میپذیرد. ویژگی minLength فقط محدودیت رشته است؛ قرار نیست null را به رشته تبدیل کند.
{"type":"object","properties":{"answer":{"type":["string","null"],"minLength":1}},"required":["answer"],"additionalProperties":false}این طرح هنوز رشته شامل فاصله را میپذیرد و نمیفهمد ادعای متن درست است یا نه. بنابراین کنترل قالب، کنترل خالیبودن معنایی و کنترل شاهد را سه آزمون مستقل نگه دارید. برای جلوگیری از تغییر شناسه و مقدار اصلی، پاکسازی متن را روی نسخه مخصوص بررسی اجرا کنید، نه با بازنویسی بیخبر داده مرجع.
نمونه آزمون مصرفکننده
پنج ورودی جدول را به یک تابع آزمایشی با مخزن ساختگی بدهید. پیش از اجرا مقدار رکورد را «بدون تغییر» بگذارید. برای چهار حالت اول هیچ نوشتنی نباید رخ دهد؛ نتیجه باید نام وضعیت و دلیل رد یا ارجاع باشد. سپس یک پاسخ دارای شاهد معتبر اضافه کنید و فقط همان مسیر مجاز را آزمایش کنید. این طرح آزمون است و نتیجه اجرای محصول اپرا نیست.
کاربرگ و ادامه کار
کاربرگ پنج حالت و تصمیم مصرفکننده شامل ورودی، تفسیر، اقدام مجاز و نتیجه مورد انتظار همین مثال است. نتیجه واقعی محیط خودتان را بعد از آزمون وارد کنید؛ مقدار نامعلوم را با صفر جایگزین نکنید. برای تعریف معنای ستونها، راهنمای دیکشنری فیلد کمک میکند. در یک دستیار سازمانی، همین قرارداد را پیش از اتصال خروجی به دادههای مشتری روشن کنید؛ این متن ادعای پشتیبانی قابلیت خاصی در اپرا نیست.
منابع اصلی
JSON Schema: null، ویژگیهای object و required و محدودیت طول رشته؛ خواندهشده در ۱ نوامبر ۲۰۲۶، تاریخ انتشار مشخص نشده است.