التحقق من صياغة JSON وتحديد أخطاء التحليل
ألصقوا سلسلة JSON أو أرسلوها للتحقق من صحة صياغتها من دون تغيير المصدر أو تنسيقه أو إصلاحه.
شغّل الأداة مجانًا
يعيد المدقق دائمًا نتيجة منظمة: ينتج عن الإدخال الصحيح مؤشر بسيط بقيمة true، بينما ينتج عن الإدخال غير الصحيح مؤشر بقيمة false مع رسالة المحلل والموضع والسطر والعمود الذي توقف عنده التحليل. تناسب هذه الاستجابة المتوقعة المحررات ونماذج رفع الملفات وفحوص النشر وحزم الاختبارات وأي سير عمل يحتاج إلى شرح الخلل في مستند JSON من دون التوقف بسبب استثناء.
تحققوا من الصياغة من دون تغيير المستند
ينبغي لمدقق الصياغة أن يجيب عن سؤال محدد: هل يستطيع محلل متوافق مع المعيار قراءة هذه السلسلة نفسها؟ تمرر هذه الأداة النص المقدم مباشرة إلى محلل JSON في المنصة. ولا تزيل المسافات الطرفية، ولا تستبدل علامات الاقتباس، ولا تحذف التعليقات، ولا تضيف الفواصل، ولا تعيد ترتيب المفاتيح، ولا تعيد تفسير القيم. هذا التحفظ مهم عند اختبار الإعدادات أو حمولات API، لأن الإصلاح التلقائي قد يخفي عيبًا سيظل يسبب الفشل في بيئة الإنتاج. تعني النتيجة الصحيحة أن السلسلة الكاملة قُبلت بوصفها قيمة JSON واحدة، بما في ذلك الكائنات والمصفوفات والسلاسل والأرقام والقيم المنطقية وnull. أما النتيجة غير الصحيحة فتبقى ضمن المخرجات العادية بدلًا من التحول إلى استثناء. لذلك يمكنكم عرض الإجابة فورًا أو التفرع في الشفرة اعتمادًا على مؤشر الصلاحية. يظل النص الفارغ والمحتوى الزائد والتعليقات والسلاسل ذات علامات الاقتباس المفردة والفواصل الختامية ومحارف التحكم غير المهربة غير صالح، لأنها ليست جزءًا من صياغة JSON.
افهموا موضع الخطأ المبلغ عنه
عندما يفشل التحليل، تتضمن النتيجة كائن خطأ يحتوي على رسالة وثلاثة إحداثيات. الموضع هو إزاحة محارف تبدأ من الصفر انطلاقًا من بداية سلسلة JavaScript. أما السطر والعمود فيبدآن من واحد، مما يجعلهما مناسبين للعرض في محرر أو رسالة تحقق. يزيد كل سطر جديد رقم السطر ويعيد العمود إلى واحد. يحدد الموضع النقطة التي اكتشف عندها المحلل أنه لا يستطيع المتابعة، وقد يكون الخطأ الفعلي قبلها مباشرة. فمثلًا، غالبًا ما يبلغ عن فاصلة مفقودة بين خاصيتين عند علامة الاقتباس الافتتاحية للخاصية الثانية، لأن المحلل يدرك هناك أن القيمة السابقة لم يتبعها رمز صحيح. ويبلغ عن الكائن أو المصفوفة غير المكتملين عند نهاية النص. قد تختلف صياغة رسالة المحلل بين بيئات JavaScript؛ لذلك استخدموا الحقول الرقمية للانتقال، واعرضوا الرسالة للأشخاص بدلًا من مطابقة نصها الكامل باعتباره فئة برمجية ثابتة.
استخدموا النتيجة بأمان في النماذج والفحوص
في نموذج المتصفح، نفذوا التحقق قبل إرسال الإعدادات، وانقلوا المؤشر إلى الموضع المعاد عندما تكون النتيجة false. وفي مسار API، تعاملوا مع الاستجابة على أنها بيانات: تابعوا فقط عندما تكون صالحة، وإلا فأرفقوا السطر والعمود والرسالة بتقرير بناء أو طلب دعم أو ملف مرفوض. يعد JSON المشوه محتوى متوقعًا من المستخدم، ولذلك يعيد نتيجة عادية يكون فيها مؤشر الصلاحية false بدلًا من خطأ إدخال. لا يرفض الطلب إلا عند غياب حقل النص المطلوب أو عندما لا يكون سلسلة، إذ لا يوجد حينها مصدر JSON لفحصه. الخوارزمية حتمية ولا تستخدم شبكة أو نموذجًا أو قيمة عشوائية أو ساعة أو حالة دائمة. يزداد زمن تنفيذها خطيًا مع حجم المستند في التحليل المعتاد وحساب الموضع. يكلف استخدام API مبلغ $0.002 لكل طلب، بينما تنفذ نسخة المتصفح الفحص نفسه محليًا.
حالات الاستخدام
تحققوا من الإعدادات قبل النشر
أوقفوا الإصدار عندما يحتوي ملف إعداد JSON على فاصلة مفقودة أو قوس غير مطابق أو تسلسل تهريب غير صالح أو عيب آخر في الصياغة.
قدموا إرشادًا دقيقًا داخل المحرر
استخدموا الإزاحة والسطر والعمود المعادة لإرشاد المستخدم إلى النقطة التي فشل عندها التحليل.
ارفضوا أمثلة حمولات API المشوهة
افحصوا سلاسل JSON الملتقطة أو المولدة في الاختبارات من دون السماح لاستثناء المحلل بإيقاف مشغل الاختبار.
الأسئلة الشائعة
ماذا يعيد مدقق صياغة JSON؟
يعيد JSON الصحيح كائنًا تكون فيه valid مساوية لـ true. أما غير الصحيح فيعيد valid مساوية لـ false مع رسالة وموضع يبدأ من الصفر وسطر وعمود يبدآن من واحد.
هل تصلح الأداة JSON غير الصحيح أو تنسقه؟
لا. تتحقق من سلسلة المصدر نفسها وتبلغ عن فشل التحليل من دون تغيير المستند.
هل تقبل التعليقات والفواصل الختامية؟
لا. لا يسمح معيار JSON بالتعليقات أو الفواصل الختامية، ولذلك يبلغ عنها بوصفها أخطاء صياغة.
هل يمكن أن تكون القيمة الأولية وحدها JSON صالحًا؟
نعم. يمكن أن تكون القيمة العليا كائنًا أو مصفوفة أو سلسلة أو رقمًا أو قيمة منطقية أو null.
ما تكلفة التحقق عبر API؟
يكلف كل طلب API مبلغ $0.002. ويمكن للأداة التفاعلية في المتصفح تنفيذ التحقق الحتمي نفسه محليًا.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/web/json-validate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"{\"name\":\"Ada\",\"active\":true}"}'const res = await fetch("https://api.kit.forhosting.com/web/json-validate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "{\"name\":\"Ada\",\"active\":true}"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/json-validate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "{\"name\":\"Ada\",\"active\":true}"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/json-validate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"{\\"name\\":\\"Ada\\",\\"active\\":true}"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"{\"name\":\"Ada\",\"active\":true}"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/json-validate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "{\"name\":\"Ada\",\"active\":true}"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.json_validate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
timeout_sec | 30 |
max_crawl_pages | 25 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |