تحويل JSON إلى JSON Schema — Numio
يستنتج JSON Schema (draft-07) من عينة JSON. في مصفوفات الكائنات تُدمج كل العناصر: المفتاح المفقود أو الذي قيمته null في بعض العناصر يُستبعد من required.
إنشاء أول مخطط تحقق لاستجابة API أو حمولة webhook من أمثلة ملتقطة.
متى تستخدمها
- إنشاء أول مخطط تحقق لاستجابة API أو حمولة webhook من أمثلة ملتقطة.
- إنتاج مخطط لتمريره إلى Ajv أو OpenAPI أو إلى خطوة تحويل JSON Schema إلى TypeScript/Zod.
طريقة الاستخدام
- الصق عينة JSON في المحرر الأيسر، أو استخدم زر تحميل الملف لفتح ملف بترميز UTF-8. تعطي مصفوفة من عدة سجلات قوائم required أدق.
- اقرأ المخطط: في الكائن المفرد كل مفتاح إلزامي (required)، والمفاتيح الغائبة أو التي قيمتها null في بعض عناصر المصفوفة اختيارية.
- انسخ المخطط وأضف القيود التي لا تُظهرها العينة، مثل الصيغ وenum وinteger وminimum.
عينة JSON
[
{ "id": 1, "name": "Ada", "email": null },
{ "id": 2, "name": "Lin", "email": "lin@example.com" }
]JSON Schema (draft-07)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Generated schema for Root",
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
}
},
"required": [
"id",
"name"
]
}
}التفاصيل والقيود
الأعداد دائمًا "type": "number"؛ ولا تُستنتج integer ولا الصيغ (email وdate-time) ولا enum ولا pattern. العنوان دائمًا "Generated schema for Root".
الحقل الذي قيمته null في كل مكان يحصل على مخطط فارغ {}. وتُعامَل null الموجودة إلى جانب قيم أخرى كدلالة على أن الحقل اختياري، لا كنوع null.
المصفوفات مختلطة الأنواع مثل [1, "x"] تصبح tuple (قائمة items مع additionalItems: false)؛ والمصفوفة الفارغة تعطي items: {}.
يُنشأ في متصفحك بواسطة json_typegen المُترجَم إلى WebAssembly. يُظهر JSON غير الصالح (بما فيه الفواصل الزائدة في النهاية) خطأ تحليل JSON، وتُرفض القيمة المفردة مثل 42 لأنها بلا بنية.
FAQ
أي إصدار (draft) من JSON Schema يُخرج؟
Draft-07، ويُعلَن بـ "$schema": "http://json-schema.org/draft-07/schema#". لا يوجد خيار لاختيار 2019-09 أو 2020-12.
كيف تُكتشف الحقول الاختيارية؟
فقط عبر عناصر المصفوفة نفسها: المفتاح المفقود من بعض الكائنات، أو الذي قيمته null في بعضها، يُستبعد من required. في الكائن المفرد كل مفتاح إلزامي.
هل يمكنه تحويل مصفوفة JSON في المستوى الأعلى؟
نعم. يحصل الجذر على "type": "array"، وتُدمج العناصر في مخطط items واحد، كما في المثال.