ما هو JSON Schema؟
JSON Schema مفردات مكتوبة بصيغة JSON نفسها تصف الشكل المتوقع لمستند JSON: أي الخصائص موجودة وأنواعها وأيها مطلوب، وقيوداً مثل الصيغ والأنماط والنطاقات. التحقق من الحمولة مقابل المخطط يكشف انحراف العقد قبل وصوله إلى المستخدمين.
كيفية استخدام مدقّق JSON Schema
- الصق مستند JSON في المحرر الأول ومخطط JSON Schema في المحرر الثاني.
- اضغط «تحقق» (Validate).
- راجع جدول المخالفات؛ يوضح كل صف القيمة التي فشلت وسبب فشلها.
مزايا مدقّق JSON Schema
- التحقق وفق الكلمات المفتاحية الأساسية في draft-07 و2019-09 و2020-12
- دعم الكائنات المتداخلة والمصفوفات والصفوف (tuples) والقيم المعدودة والأنماط والصيغ (formats) والحدود الرقمية
- التعامل مع allOf / anyOf / oneOf / not وif-then-else ومراجع $ref المحلية
- إدراج كل مخالفة مع مسار JSON والكلمة المفتاحية والرسالة وموقعها في المخطط
- فحص المخطط نفسه والإبلاغ عن الأنواع غير المعروفة أو التعبيرات النمطية غير الصالحة
- تصدير المخالفات بصيغة CSV
مثال على مدقّق JSON Schema
التحقق من كائن مستخدم
الإدخال:
Document: {"email":"layla@example","age":17}
Schema: {"type":"object","required":["id"],"properties":{"email":{"format":"email"},"age":{"minimum":18}}}النتيجة:
$ required Missing required property "id".
$.email format String is not a valid email.
$.age minimum Value must be ≥ 18.مستند JSON
الجزء 1:{ "email": الجزء 2:"layla@example", "age": الجزء 3:17 }
JSON Schema
{ "type": "object", الجزء 1:"required": ["id"], "properties": { "email": { الجزء 2:"format": "email" }, "age": { الجزء 3:"minimum": 18 } } }
- 1
required: الخاصية"id"غير موجودةMissing required property "id".$ → #/requiredفشل - 2
format: بريد إلكتروني غير صالحString is not a valid email.$.email → #/properties/email/formatفشل - 3
minimum: القيمة 17 أقل من 18Value must be ≥ 18.$.age → #/properties/age/minimumفشل
المثال أعلاه. تحت كل رسالة: المسار ← موقع المخطط، كما في جدول المخالفات. تُنسب الخاصية المفقودة إلى الكائن الذي يجب أن يحتويها، وهو هنا $.
الأسئلة الشائعة حول مدقّق JSON Schema
ما إصدارات JSON Schema المدعومة؟
الكلمات المفتاحية الأساسية في draft-07 و2019-09 و2020-12: type وproperties وrequired وenum وconst وpattern وformat والقيود الرقمية وقيود الطول وitems/prefixItems وcontains وallOf/anyOf/oneOf/not وif/then/else وdependentRequired ومراجع $ref المحلية.
هل تُحلّ مراجع $ref البعيدة؟
تُحلّ المراجع المحلية فقط (#/definitions/… و#/$defs/…). ولا تُجلب عناوين URL البعيدة، لذا ضمّن أي مخططات خارجية داخل المخطط أولاً.
ما صيغ السلاسل النصية التي يتم فحصها؟
email وdate-time وdate وtime وuuid وuri وhostname وipv4 وipv6 وregex وjson-pointer. وتُتجاهل الصيغ غير المعروفة كما توصي المواصفة.
كيف يُبلَّغ عن المخالفات؟
تُدرج كل مخالفة مع مسار JSON للقيمة المخالفة، والكلمة المفتاحية التي فشلت في المخطط، ورسالة بلغة مبسطة، وموقعها داخل المخطط.
ملاحظات تقنية
المدقّق تنفيذ خالٍ من الاعتماديات يقيّم الكلمات المفتاحية في جميع المستويات مع تتبّع مسار المثيل (instance) ومسار المخطط معاً. تُقيَّم الكلمات المفتاحية المجاورة لـ $ref (وفق سلوك 2019-09 وما بعده)، كما يُراعى امتداد nullable الخاص بـ OpenAPI.
المراجع
- JSON Schema Specificationالمفردات المستخدمة لوصف بنية مستندات JSON والتحقق منها (الأنواع والحقول المطلوبة والصيغ).
- RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Formatقواعد JSON: الكائنات والمصفوفات والنصوص والأرقام والقيم الثلاث الثابتة، وUTF-8 كترميز للتبادل.