ToolDeck

مدقق مخطط JSON

التحقق من بيانات JSON مقابل مخطط JSON Schema (Draft 7)

جرب مثالاً

بيانات JSON

مخطط JSON Schema

يعمل محليًا · آمن للصق الأسرار
يعمل محليًا · آمن للصق الأسرار

ما هو التحقق من مخطط JSON Schema؟

التحقق من مخطط JSON Schema هو عملية فحص ما إذا كان مستند JSON يتوافق مع مجموعة من القيود الهيكلية وقيود القيم المحددة في مخطط JSON Schema. المخطط نفسه مستند JSON يصف الشكل المتوقع لبياناتك: أي الخصائص مطلوبة، وما الأنواع التي يجب أن تكون عليها، والنطاقات المسموح بها للأرقام، وأنماط النصوص، وأطوال المصفوفات، وغير ذلك. مواصفات JSON Schema تتولى صيانتها json-schema.org وتُنشر كسلسلة من مسودات IETF، والأكثر اعتمادًا هما Draft 7 وDraft 2020-12.

بينما يفحص التحقق من JSON العادي الصياغة فقط (هل الأقواس متطابقة؟ هل النصوص بين علامات اقتباس؟)، يذهب التحقق من المخطط أبعد من ذلك. فهو يجيب على أسئلة كـ: هل تحتوي استجابة API هذه على حقل "id" يكون دائمًا عددًا صحيحًا؟ هل حقل "status" واحد من ثلاث قيم مسموح بها؟ هل الكائنات المتداخلة ذات شكل صحيح؟ هذا النوع من التحقق الهيكلي يكتشف أخطاء تفوت فحوصات الصياغة تمامًا، لأن JSON الصحيح صياغيًا قد يكون خاطئًا دلاليًا في سياق تطبيقك.

يُستخدم JSON Schema في تعريفات OpenAPI/Swagger، والتحقق من ملفات الإعداد، والتحقق من النماذج، وقيود مستندات قاعدة البيانات، والاختبار الآلي. أدوات كـ Ajv (JavaScript) وjsonschema (Python) وcheck-jsonschema (CLI) تُنفذ المواصفة لتمكينك من التحقق من البيانات برمجيًا. يتيح لك هذا المدقق الإلكتروني لصق المخطط ومستند البيانات معًا للتحقق من التوافق فورًا، دون تثبيت أي مكتبة.

لماذا تستخدم مدققًا إلكترونيًا لمخطط JSON Schema؟

كتابة المخططات وتصحيح أخطاء التحقق يدويًا أمر بطيء. يمنحك مدقق مخطط JSON Schema الإلكتروني ردود فعل فورية على مدى تطابق بياناتك مع مخططك، مع رسائل خطأ واضحة تشير إلى الخاصية التي فشلت بالضبط.

نتائج التحقق الفورية
الصق مخططك وبياناتك، وشاهد نتائج التحقق في الوقت الفعلي. كل خطأ يعرض مسار JSON والقيد المحدد الذي فشل، حتى تتمكن من إصلاح المشكلات دون قراءة مخرجات مكتبة المدقق.
🔒
معالجة محلية تحافظ على الخصوصية
بيانات JSON لا تغادر متصفحك قط. يعمل كل التحقق محليًا في JavaScript. لا خادم، لا سجلات، لا احتفاظ بالبيانات. آمن للمخططات التي تصف APIs داخلية أو تحتوي على أسماء حقول خاصة.
🎯
دعم إصدارات JSON Schema
يتعامل المدقق مع كلمات مفتاح Draft 7 شاملًا type وrequired وproperties وenum وpattern وminimum/maximum وitems وanyOf وoneOf وallOf وadditionalProperties. اختبر مخططك هنا قبل ربطه بخط أنابيب البناء أو مجموعة الاختبارات.
📋
بلا حساب أو تثبيت
افتح الصفحة، الصق JSON الخاص بك، وتحقق. لا npm install، ولا pip package، ولا Docker image. مفيد حين تحتاج إلى فحص مخطط سريع على جهاز لا تستطيع فيه تثبيت أدوات التطوير.

حالات استخدام التحقق من مخطط JSON Schema

اختبار عقد API
تحقق من استجابات API مقابل المخطط المحدد في مواصفة OpenAPI الخاصة بك. اكتشف التغييرات المُخلّة، كتحول حقل من integer إلى string، قبل أن تصل إلى بيئة الإنتاج.
التحقق من ملفات الإعداد
تحقق من أن ملفات إعداد JSON لخطوط CI/CD وملفات Kubernetes أو إعدادات التطبيق تطابق المخطط المتوقع قبل الإيداع. يمنع أعطال النشر الناجمة عن مفاتيح مفقودة أو مكتوبة بشكل خاطئ.
نقاط تحقق في CI/CD
أضف التحقق من المخطط كخطوة في CI لرفض الحمولات التي تنتهك العقد. يعمل هذا مع ملفات متغيرات Terraform ومدخلات GitHub Actions أو أي JSON منظم تستهلكه عمليات الأتمتة.
مراجعة بيانات ضمان الجودة والاختبار
تحقق من أن ملفات بيانات الاختبار والبيانات الوهمية تتوافق مع المخطط ذاته الذي يتوقعه تطبيقك. بيانات الاختبار غير المتطابقة مصدر شائع لنتائج اختبار إيجابية زائفة.
معالجة بيانات خط الأنابيب
تحقق من سجلات JSON الواردة عند حافة خط أنابيب البيانات. يُرشّح التحقق من المخطط الأحداث المشوّهة قبل وصولها إلى مستودع البيانات، مما يقلل تكاليف التنظيف لاحقًا.
تعلم صياغة JSON Schema
جرّب كلمات مفتاح المخطط بشكل تفاعلي. اكتب مخططًا، الصق بيانات اختبار، وشاهد أي القيود تنجح أو تفشل. أسرع من كتابة سكريبت وتشغيله من الطرفية في كل مرة.

مرجع كلمات مفتاح JSON Schema

يتكوّن مخطط JSON Schema من كلمات مفتاح تفرض كل منها قيدًا على البيانات المُتحقَّق منها. يسرد الجدول أدناه كلمات المفتاح الأكثر استخدامًا في Draft 7 وما بعده. يمكن دمج كل كلمة مفتاح مع غيرها في كائن المخطط نفسه.

كلمة المفتاحالغرضمثال
typeRestricts the data type"type": "string"
propertiesDefines expected object keys and their schemas"properties": { "name": { "type": "string" } }
requiredLists mandatory properties"required": ["id", "name"]
itemsSchema for array elements"items": { "type": "number" }
enumRestricts value to a fixed set"enum": ["active", "inactive"]
patternRegex constraint on strings"pattern": "^[A-Z]{2}\\d{4}$"
minimum / maximumNumeric range bounds"minimum": 0, "maximum": 100
minLength / maxLengthString length bounds"minLength": 1, "maxLength": 255
$refReuses another schema by URI"$ref": "#/$defs/address"
additionalPropertiesControls extra keys in objects"additionalProperties": false
anyOf / oneOf / allOfCombines multiple schemas logically"anyOf": [{ "type": "string" }, { "type": "null" }]
if / then / elseConditional schema application"if": { "properties": { "type": { "const": "email" } } }

مقارنة إصدارات JSON Schema: Draft 7 مقابل 2019-09 مقابل 2020-12

مرّ JSON Schema بعدة إصدارات من المسودات. Draft 7 (المنشور عام 2018) هو الأوسع دعمًا في أدوات التطوير. أدخل Draft 2019-09 كلمة $defs (بديلًا عن definitions) وunevaluatedProperties و$recursiveRef. أما Draft 2020-12 (الإصدار المستقر الأحدث) فقد استبدل $recursiveRef بـ $dynamicRef وأضاف prefixItems للتحقق من الصفوف. عند اختيار مسودة، تحقق من أن مكتبة التحقق الخاصة بك تدعمها. Ajv يدعم المسودات الثلاث. مكتبة jsonschema في Python تدعم حتى 2020-12 منذ الإصدار 4.0.

الميزةDraft 7Draft 2019-09Draft 2020-12
$schema URIdraft-07/schema#2019-09/schema2020-12/schema
if / then / elseYesYesYes
$defs (definitions)definitions$defs$defs
$ref alongside keysNo (sibling ignored)YesYes
$dynamicRefNoNo ($recursiveRef)Yes
prefixItemsNo (use items array)No (use items array)Yes
unevaluatedPropertiesNoYesYes
$vocabularyNoYesYes

أمثلة على الكود

تُظهر هذه الأمثلة كيفية التحقق من JSON مقابل مخطط برمجيًا. كل مثال يستخدم مكتبة موثوقة ومُصانة في نظامها البيئي.

JavaScript (Ajv)
import Ajv from 'ajv';

const ajv = new Ajv();

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string', minLength: 1 },
    age: { type: 'integer', minimum: 0 },
    email: { type: 'string', format: 'email' }
  },
  required: ['name', 'email'],
  additionalProperties: false
};

const data = { name: 'Alice', age: 30, email: 'alice@example.com' };

const validate = ajv.compile(schema);
const valid = validate(data);
console.log(valid);          // → true
console.log(validate.errors); // → null

// Invalid data — missing required "email"
validate({ name: 'Bob', age: 25 });
console.log(validate.errors);
// → [{ instancePath: '', keyword: 'required', params: { missingProperty: 'email' } }]
Python (jsonschema)
from jsonschema import validate, ValidationError

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string", "minLength": 1},
        "age": {"type": "integer", "minimum": 0},
        "tags": {
            "type": "array",
            "items": {"type": "string"},
            "uniqueItems": True
        }
    },
    "required": ["name"]
}

# Valid data
validate(instance={"name": "Alice", "age": 30, "tags": ["admin"]}, schema=schema)
# → No exception raised

# Invalid data — wrong type for "age"
try:
    validate(instance={"name": "Alice", "age": "thirty"}, schema=schema)
except ValidationError as e:
    print(e.message)
    # → 'thirty' is not of type 'integer'
    print(e.json_path)
    # → $.age
Go (santhosh-tekuri/jsonschema)
package main

import (
    "fmt"
    "strings"
    "github.com/santhosh-tekuri/jsonschema/v5"
)

func main() {
    schemaJSON := `{
        "type": "object",
        "properties": {
            "id": { "type": "integer" },
            "status": { "enum": ["active", "inactive"] }
        },
        "required": ["id", "status"]
    }`

    compiler := jsonschema.NewCompiler()
    compiler.AddResource("schema.json", strings.NewReader(schemaJSON))
    schema, _ := compiler.Compile("schema.json")

    // Valid data
    data := map[string]interface{}{"id": 1, "status": "active"}
    err := schema.Validate(data)
    fmt.Println(err) // → <nil>

    // Invalid — missing "status"
    bad := map[string]interface{}{"id": 2}
    err = schema.Validate(bad)
    fmt.Println(err) // → validation failed: missing properties: 'status'
}
CLI (check-jsonschema)
# Install via pip
pip install check-jsonschema

# Validate a file against a schema
check-jsonschema --schemafile schema.json data.json
# → ok -- validation done

# Validate against a remote schema (e.g., GitHub Actions workflow)
check-jsonschema --builtin-schema vendor.github-workflows my-workflow.yml

# Validate multiple files at once
check-jsonschema --schemafile schema.json file1.json file2.json file3.json

الأسئلة الشائعة

ما الفرق بين التحقق من JSON والتحقق من مخطط JSON Schema؟
التحقق من JSON يفحص ما إذا كانت السلسلة النصية صياغة JSON صحيحة: أقواس متداخلة بشكل صحيح، مفاتيح بين علامات اقتباس، لا فواصل نهائية. أما التحقق من مخطط JSON Schema فيذهب خطوة أبعد ويفحص ما إذا كانت بيانات JSON المُحلَّلة تتطابق مع عقد هيكلي: أنواع صحيحة، حقول مطلوبة موجودة، قيم ضمن النطاقات المسموح بها. تحتاج إلى JSON صالح قبل تطبيق المخطط، لكن JSON الصالح قد يفشل في التحقق من المخطط.
أي مسودة من JSON Schema يجب أن أستخدم؟
Draft 7 هو الافتراضي الأكثر أمانًا. يتمتع بأوسع دعم للمكتبات عبر اللغات ويغطي كلمات المفتاح التي تحتاجها معظم المشاريع: type وproperties وrequired وenum وpattern وanyOf وoneOf وallOf و$ref. استخدم Draft 2020-12 إذا احتجت ميزات كـ prefixItems للتحقق من الصفوف، أو $dynamicRef للمخططات القابلة للتوسيع، أو unevaluatedProperties لأشكال كائنات صارمة. تحقق من وثائق مكتبة المدقق لتأكيد دعم المسودة قبل الترقية.
كيف يعمل $ref في JSON Schema؟
تتيح كلمة المفتاح $ref الإشارة إلى مخطط آخر عبر URI بدلًا من تكراره. قيمة مثل "$ref": "#/$defs/address" تشير إلى مخطط محدد في قسم $defs من المستند نفسه. يمكنك أيضًا الإشارة إلى ملفات خارجية بـ "$ref": "https://example.com/schemas/address.json". في Draft 7، تستبدل $ref جميع كلمات المفتاح المجاورة في الكائن نفسه. في Draft 2019-09 وما بعده، تُطبَّق كلمات المفتاح المجاورة إلى جانب $ref.
ما الفرق بين anyOf وoneOf وallOf؟
jsonSchemaValidatorContent.a4
هل يمكن لـ JSON Schema التحقق من الكائنات والمصفوفات المتداخلة؟
نعم. استخدم كلمة المفتاح properties لتعريف مخططات لمفاتيح الكائن المتداخل، وكلمة المفتاح items لتعريف مخطط يجب أن يتطابق معه كل عنصر في المصفوفة. يمكن تداخل هذه بأي عمق. للمصفوفات حيث يكون لكل موضع مخطط مختلف (الصفوف)، استخدم prefixItems في Draft 2020-12 أو الشكل المصفوفي لـ items في Draft 7.
هل يتم إرسال البيانات التي أُدخلها إلى هذه الأداة إلى خادم؟
لا. يعمل المدقق بالكامل في متصفحك باستخدام JavaScript. بيانات JSON ومخططك لا تُرسَل إلى أي خادم. يمكنك التحقق من ذلك بفتح مراقب الشبكة في متصفحك أثناء استخدام الأداة.
كيف أتحقق من JSON Schema في خط أنابيب CI/CD؟
استخدم مدققًا من سطر الأوامر كـ check-jsonschema (Python/pip) أو ajv-cli (Node.js/npm). يقبل كلاهما ملف مخطط وملف بيانات واحد أو أكثر كوسيطات. أضف أمر التحقق كخطوة في إعداد CI. إذا فشل التحقق، تنتهي العملية برمز غير صفري مما يوقف خط الأنابيب. بالنسبة لـ GitHub Actions، يمكنك أيضًا استخدام إجراء check-jsonschema مباشرةً.