مدقق JSON Schema
تحقق فوراً من JSON مقابل أي JSON Schema في متصفحك. يدعم Draft 2020-12 و2019-09 وDraft-07 مع رسائل أخطاء دقيقة بالمسار. خصوصية تامة - بدون رفع ولا حساب، مجاني.
ما هو مدقق JSON Schema؟
مدقق JSON Schema هو برنامج يأخذ مستندَي JSON - مستند بيانات ومستند مخططة - ويُبلّغ عمّا إذا كانت البيانات تتوافق مع عقد المخططة. تُعلن المخططة أنواع الحقول والمفاتيح المطلوبة ونطاقات القيم وقيم enum المسموحة وأنماط regex والقواعد الهيكلية باستخدام مفردات ثابتة (type، properties، required، items، enum، oneOf، allOf، $ref، format). يتجوّل المدقق في المستندَين معاً ويُصدر صفر أو أكثر من الأخطاء، كلٌّ منها مثبّت إلى مسار JSON Pointer داخل البيانات.
يعمل التحقق في وقت التشغيل، عند الحدود بين المدخلات غير الموثوقة وكودك. تختفي أنواع TypeScript في وقت التصريف ولا تستطيع المساعدة مع JSON القادم من webhook أو API طرف ثالث أو لصق المستخدم - تلك الفجوة هي بالضبط ما يملؤه JSON Schema. اقرنه بـTypeScript (أو Pydantic في Python) فتحصل على ضمانات وقت التصريف داخل قاعدتك البرمجية بالإضافة إلى ضمانات وقت التشغيل عند الحدود.
Draft 2020-12 هو المواصفة الحالية وما يجب اختياره للمشاريع الجديدة في 2026. تظل الإصدارات السابقة (2019-09، Draft-07، Draft-06، Draft-04) في القواعد البرمجية القديمة - Draft-07 ما زال شائعاً في رسوم Helm وإعدادات VS Code وإعدادات Ajv القديمة. يستخدم OpenAPI 3.1 Draft 2020-12 أصلياً؛ ويستخدم OpenAPI 3.0 مجموعة فرعية من Draft 4.
تعمل هذه الأداة بالكامل في متصفحك. لا يغادر JSON الخاص بك ولا مخططتك ولا ناتج التحقق جهازك - آمن لعقود API الخاصة والحمولات الحساسة. تُحلّ مؤشرات $ref الداخلية تلقائياً؛ وتُعطَّل refs الخارجية عبر HTTP عمداً للحفاظ على الخصوصية.
تعمل مع أدوات JSON المجاورة؟ نسّق JSON بـJSON Formatter قبل اللصق؛ قارن مستندَي JSON بـJSON Diff؛ حوّل بـJSON to YAML وYAML to JSON. للتحقق من البداية إلى النهاية في Node وPython والمتصفح، راجع دليل التحقق من JSON Schema.
// A 5-line schema that catches three real bugs
const schema = {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": { "type": "integer", "minimum": 1 },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "minimum": 0, "maximum": 150 }
},
"required": ["id", "email"],
"additionalProperties": false
};
// Three bugs the schema catches:
const bad = { "id": "42", "age": 200 };
// /id → type: expected integer, got string
// /email → required: missing
// /age → maximum: 200 > 150
// In Node: new Ajv().compile(schema)(bad) // false; ajv.errors has the paths
// In Python: jsonschema.validate(bad, schema)
// In the browser: this tool — same errors, same paths, no install الميزات الرئيسية
دعم متعدد الإصدارات
Draft 2020-12 (الافتراضي) و2019-09 وDraft-07. يكتشف الإصدار تلقائياً من $schema URI؛ مع منتقي احتياطي للمخططات بدونه.
أخطاء دقيقة بالمسار
يتضمن كل خطأ JSON Pointer (مثل /user/email/0) والكلمة المفتاحية الفاشلة (type، required، pattern) ورسالة من سطر واحد. انقر للقفز إلى الموقع.
تحقق مباشر
يتحقق أثناء الكتابة. تتحدث الأخطاء في الوقت الفعلي فيمكنك تكرار تعديل المخططة أو البيانات دون التنقل عبر أزرار التحقق.
تغطية كلمات format
email، uri، uuid، date، date-time، ipv4، ipv6، hostname، regex - أنماط format التي تستخدمها فعلاً، مُتحقَّق منها بأنماط مُختبَرة.
100% في المتصفح
لا تغادر المدخلات جهازك أبداً. لا رفع، لا تحليلات لما تلصقه، لا تخزين JSON في localStorage. آمن للعقود الخاصة والحمولات الحساسة.
مخططات نموذجية بنقرة واحدة
ضبطات مسبقة قابلة للتحميل (نموذج اشتراك، ظرف webhook، ملف إعدادات، مصفوفة طلبات) تنقلك إلى تحقق عامل في أقل من خمس ثوانٍ.
أمثلة
كائن صالح - required + الأنواع
{
"id": 42,
"email": "alice@example.com",
"age": 30
} {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": { "type": "integer", "minimum": 1 },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "minimum": 0, "maximum": 150 }
},
"required": ["id", "email"],
"additionalProperties": false
} تُعلن المخططة أن id وemail مطلوبان وتثبّت الأنواع. تجتاز البيانات أعلاه - كل القيود مستوفاة. جرّب حذف email أو تغيير id إلى سلسلة لرؤية الأخطاء الدقيقة بالمسار.
غير صالح - حقل required مفقود + نوع خاطئ
{
"id": "42",
"age": 200
} {
"type": "object",
"properties": {
"id": { "type": "integer" },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "maximum": 150 }
},
"required": ["id", "email"]
} ثلاثة أخطاء: /id سلسلة وليس integer، /email مفقود، /age (200) يتجاوز maximum 150. كل خطأ يبلّغ عن مسار JSON Pointer دقيق فتُصلح البيانات - أو تُخفّف المخططة - دون تخمين.
اتحاد مميَّز - oneOf مع const
{
"type": "order.created",
"data": { "orderId": "ORD-001234", "totalUsd": 49.99 }
} {
"oneOf": [
{
"properties": {
"type": { "const": "order.created" },
"data": {
"type": "object",
"properties": {
"orderId": { "type": "string", "pattern": "^ORD-[0-9]{6}$" },
"totalUsd": { "type": "number", "minimum": 0 }
},
"required": ["orderId", "totalUsd"]
}
},
"required": ["type", "data"]
},
{
"properties": {
"type": { "const": "order.refunded" },
"data": { "type": "object", "required": ["refundId"] }
},
"required": ["type", "data"]
}
]
} التحقق من ظرف webhook. يطابق فرع oneOf الأول لأن type يساوي "order.created". غيّر type إلى "order.refunded" أو اكسر نمط orderId لرؤية كيف يُبلّغ oneOf عن إخفاقات كل فرع.
مصفوفة كائنات - items + uniqueItems
[
{ "sku": "A1", "qty": 3 },
{ "sku": "B2", "qty": 5 },
{ "sku": "A1", "qty": 3 }
] {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"type": "object",
"properties": {
"sku": { "type": "string", "pattern": "^[A-Z][0-9]+$" },
"qty": { "type": "integer", "minimum": 1 }
},
"required": ["sku", "qty"]
}
} عنصران متطابقان بايتاً ببايت، لذا تنطلق uniqueItems. يتضارب العنصران 0 و2 - يُبلّغ المدقق عن التكرار في جذر المصفوفة. مفيد لاكتشاف تكرار أسطر السلة وطلبات الشحن المكرّرة بسبب أخطاء الدمج.
كيفية الاستخدام
- 1
الصق JSON Schema
أسقط مخططتك في اللوحة اليمنى. يكتشف المدقق الإصدار تلقائياً من $schema URI إن وُجد؛ وإلا اختر Draft 2020-12 أو 2019-09 أو Draft-07 من شريط الأدوات.
- 2
الصق بيانات JSON
أسقط مستند JSON الذي تريد فحصه في اللوحة اليسرى. يعمل التحقق أثناء الكتابة؛ المدخلات الكبيرة (أكثر من 200 كيلوبايت) تنتقل إلى زر Validate يدوي للحفاظ على سرعة الكتابة.
- 3
اقرأ قائمة الأخطاء
يحمل كل خطأ مسار JSON Pointer وكلمة مفتاحية ورسالة من سطر واحد. انقر على خطأ للقفز إلى الموقع في بياناتك، أصلحه، وراقب العدد ينخفض في الوقت الفعلي.
مزالق JSON Schema الشائعة
Type: integer مقابل number
يعتبر JSON Schema 1.0 رقماً وليس عدداً صحيحاً. إذا قال عقدك integer فالمدقق يرفض 1.0 - رغم أن معظم اللغات تعدّه مساوياً لـ1. اختر number ما لم تكن بحاجة فعلية إلى integer.
{ "qty": 1.0 } schema: { "type": "integer" } → error: not an integer { "qty": 1 } schema: { "type": "integer" } → valid required في مستوى تعشيش خاطئ
يجب أن يقع required بجوار properties لا داخل أحدها. مصفوفة required داخل تعريف خاصية تُتجاهل بصمت - لا يُطبّقها المدقق أبداً.
{ "properties": { "name": { "type": "string", "required": true } } } { "properties": { "name": { "type": "string" } }, "required": ["name"] } additionalProperties الافتراضية True
بدون additionalProperties: false تكون المخططة مفتوحة - أي مفتاح إضافي يمر. نسيان هذا هو السبب الأكثر شيوعاً لأن المخططات "تقبل كل شيء".
{ "properties": { "id": { "type": "integer" } } } accepts: { "id": 1, "foo": "bar", "x": null } { "properties": { "id": { "type": "integer" } }, "additionalProperties": false } OpenAPI 3.0 nullable مقابل مصفوفة الأنواع في Draft 2020-12
OpenAPI 3.0 يستخدم nullable: true؛ Draft 2020-12 يستخدم type: ["string", "null"]. خلطهما يُنتج مخططات تبدو صحيحة لكنها لا تسمح بـnull فعلياً.
{ "type": "string", "nullable": true } in 2020-12: nullable is just an unknown keyword { "type": ["string", "null"] } in 2020-12: explicitly allows null Pattern بدون مرسى
تطابق regex في JSON Schema أي مكان افتراضياً - pattern: "^[A-Z]+$" يرسي السلسلة كاملةً، أما pattern: "[A-Z]+" فيطابق إذا وُجد أي حرف كبير في أي موضع.
pattern: "[A-Z]+" accepts: "helloX" (because X matches)
pattern: "^[A-Z]+$" accepts only: "HELLO"
oneOf حيث كان anyOf مقصوداً
يتطلب oneOf أن يطابق فرع واحد فقط بالضبط. إذا قبل فرعان نفس الشكل، يفشل oneOf على بيانات كان anyOf سيقبلها - والرسالة مربكة ("يطابق أكثر من واحد").
oneOf: [ { type: "string" }, { type: "string", maxLength: 10 } ] on: "hi" → error: matches both anyOf: [ { type: "string" }, { type: "string", maxLength: 10 } ] on: "hi" → valid حالات الاستخدام الشائعة
- التحقق من طلبات API
- الصق جسم طلب ومخططة نقطتك النهائية قبل النشر. التقط استجابات 400 التي لم تُغطِّها اختباراتك - حقول مطلوبة مفقودة، أنواع خاطئة، أرقام خارج النطاق.
- التحقق من حمولة Webhook
- البائع أرسل حمولة يرفضها معالجك؟ تحقّق من الحمولة الفعلية مقابل مخططتك، ثم مقابل مخططة البائع المنشورة. الفرق بين الاثنين هو خطأك.
- تدقيق ملفات الإعدادات
- package.json، tsconfig.json، helm values.yaml - لكل ملف إعدادات مخططة عامة. الصق المخططة، الصق الإعدادات، اعثر على الخطأ الكتابي. تخطَّ التجربة والخطأ.
- اختبار مكونات OpenAPI
- ارفع مكوّن مخططة من مستند OpenAPI 3.1، الصقه هنا، تحقّق من حمولات نموذجية. أسرع من تشغيل خادم وهمي، حتمي، ولا يحتاج SDK.
- فحص مسبق لإرسال النماذج
- الصق حمولة نموذج عيّنة قبل توصيل التحقق في الواجهة. تأكد من أن المخططة ترفض ما تتوقع وتقبل ما تتوقع، ثم اشحن المخططة نفسها للعميل والخادم.
- فحص عقد خط أنابيب البيانات
- انحرف ناتج ETL؟ الصق صفاً نموذجياً والمخططة اللاحقة. حدد بدقة أي مُنتج تغيّر وأي مفاتيح تكسّرت قبل أن يُعيد خط الأنابيب 10,000 سجل.
التفاصيل التقنية
- متوافق مع Draft 2020-12
- ينفّذ مواصفة Draft 2020-12 المنشورة - الكلمات المفتاحية ونظام الأنواع ومفردات format. تمّ التحقق المتبادل مقابل ناتج Ajv 8.x وajv-formats.
- مسارات أخطاء JSON Pointer
- تستخدم الأخطاء JSON Pointer (RFC 6901) (/user/email/0). يشير كل فشل لكلمة مفتاحية إلى موقع واحد قابل للحلّ في البيانات - بلا غموض، بلا بحث نصي.
- حلّ $ref الداخلي
- يحلّ مؤشرات $ref داخل مستند واحد (#/$defs/foo، #/properties/bar). تُكتشف الدورات ويُبلَّغ عنها. $refs خارجية عبر HTTP معطّلة للخصوصية.
أفضل الممارسات
- اضبط دائماً additionalProperties: false
- في عقود الإدخال (أجسام الطلبات، ملفات الإعدادات، رسائل الطابور)، المفاتيح غير المعروفة عادةً ما تكون أخطاء - أخطاء كتابية، حقول عرضية، أو محاولات مهاجم. ارفضها افتراضياً.
- استخدم $defs للمخططات الفرعية القابلة لإعادة الاستخدام
- أدمج الشكل نفسه مرتين فينحرفان. انقل التعريفات المشتركة إلى $defs وأشر إليها بـ$ref - مصدر واحد للحقيقة، كل تغيير يُطبَّق في كل مكان.
- تحقّق قبل منطق الأعمال
- شغّل التحقق من المخططة مباشرةً بعد JSON.parse، قبل لمس البنية المحلَّلة. تضييق الأنواع والقيم الافتراضية والاستمرار كلها تفترض ثبات العقد - تأكد منه.
الأسئلة الشائعة
ما هو التحقق من JSON Schema؟
ما إصدارات JSON Schema التي يدعمها هذا المدقق؟
كيف أتحقق من JSON مقابل مخططة؟
ما الفرق بين التحقق من JSON Schema والتحقق من صياغة JSON؟
لماذا ترفض المخططة JSON يبدو صحيحاً؟
هل يدعم $ref ومراجع المخططات الخارجية؟
ماذا يفعل additionalProperties: false؟
كيف أتحقق من JSON مقابل مخططة في Node.js أو Python؟
ما الفرق بين oneOf وanyOf وallOf؟
هل يدعم مخططات OpenAPI؟
لماذا يقول المدقق إن JSON Schema الخاصة بي غير صالحة بحدّ ذاتها؟
هل ترسل الأداة بيانات JSON أو المخططة إلى خادم؟
هل يمكنني التحقق من JSON Lines (NDJSON) أو مستندات متعددة؟
أدوات ذات صلة
عرض جميع الأدوات →محوّل Base64 — ترميز وفك ترميز أونلاين
الترميز والتنسيق
رمّز وفك ترميز Base64 مجاناً أونلاين — محوّل فوري مع دعم UTF-8 والرموز التعبيرية. خصوصية 100% — يعمل في متصفّحك. جرّبه الآن.
JSON Diff مقارنة
الترميز والتنسيق
قارن ملفي JSON فوراً في متصفحك. عرض جنباً إلى جنب مع تمييز الفروق، وإخراج JSON Patch (RFC 6902)، وتجاهل الحقول المزعجة كالطوابع الزمنية والمعرّفات. خصوصية تامة، بدون رفع ملفات.
منسق JSON — التحقق والضغط وإصلاح الأخطاء
الترميز والتنسيق
نسّق JSON وتحقّق من صحته وأصلح الأخطاء فوراً — محرّر مجاني أونلاين يعمل في متصفّحك. يدعم الضغط والتجميل والتحويل. جرّبه الآن.
محوّل JSON إلى YAML
الترميز والتنسيق
الصق JSON واحصل على YAML فوراً. تحويل مباشر في متصفّحك، جاهز لـ Kubernetes وDocker Compose، مع حماية من مشكلة Norway. خصوصية 100%.
مولّد QR: روابط، WiFi، بطاقات
الترميز والتنسيق
مولّد رموز QR مجاني. أنشئ رموز QR ثابتة لـURL وWiFi وvCard والبريد والرسائل. تنزيل SVG وPNG. بدون انتهاء، بدون تسجيل، 100% داخل متصفحك.
مرمّز ومفكك ترميز URL مع محلل روابط مدمج
الترميز والتنسيق
رمّز وفك ترميز روابط URL فوراً أونلاين — مع محلل روابط مدمج ووضعي encodeURI وencodeURIComponent. مجاني وخاص 100%. جرّبه الآن.