یک فایل JSON ممکن است در نگاه اول مرتب و خوانا باشد، اما فقط یک کوتیشن جاافتاده، کامای اضافه یا نویسه کنترلنشده کافی است تا برنامه نتواند آن را Parse کند. JSON Validator ابزاری است که متن JSON را از نظر قواعد نحوی بررسی میکند، محل خطا را نشان میدهد و کمک میکند پیش از ارسال داده به API، ذخیره در فایل یا استفاده در برنامه، از معتبر بودن Syntax مطمئن شوید. بااینحال Validator معمولی فقط نحو را میسنجد؛ درست بودن نوع فیلدها، الزامی بودن Propertyها یا منطق داده به JSON Schema یا اعتبارسنجی تجاری جداگانه نیاز دارد.
پاسخ سریع: JSON Validator چیست؟
JSON Validator متنی را دریافت میکند و بررسی میکند آیا مطابق دستور زبان استاندارد JSON قابل Parse است یا نه. این بررسی شامل بسته شدن درست آکولاد و براکت، استفاده از کوتیشن دوتایی برای کلیدها و Stringها، محل صحیح کاما و دونقطه، شکل معتبر عددها و Escape درست نویسههاست. خروجی معمولاً وضعیت معتبر یا نامعتبر، شماره خط و ستون و توضیح خطا را نمایش میدهد. معتبر بودن Syntax به معنی معتبر بودن ساختار مورد انتظار برنامه یا امن بودن محتوا نیست.
اعتبارسنجی JSON دقیقاً چه چیزی را بررسی میکند؟
Validator نحوی تلاش میکند کل ورودی را مانند یک Parser استاندارد بخواند. اگر حتی یک بخش با Grammar سازگار نباشد، پردازش متوقف میشود یا مجموعهای از خطاها گزارش میشود.
- وجود یک مقدار JSON معتبر در ریشه
- تطابق آکولادهای Object و براکتهای Array
- قرار گرفتن نام Propertyها داخل کوتیشن دوتایی
- وجود دونقطه میان کلید و مقدار
- قرار گرفتن کاما فقط میان اعضا
- صحیح بودن String Escapeها
- رعایت شکل مجاز Number
- استفاده دقیق از
true،falseوnull - نبود متن اضافی پس از پایان مقدار ریشه
Validator نحوی میگوید «این متن JSON قابل Parse است یا نه»؛ Schema Validator میگوید «داده Parseشده با قرارداد مورد انتظار سازگار است یا نه».
نمونه JSON معتبر
{
"id": 42,
"name": "سارا",
"active": true,
"roles": ["editor", "author"],
"profile": {
"city": "Tehran",
"score": null
}
}
در این نمونه همه کلیدها String هستند، کاماها میان اعضا قرار گرفتهاند و مقادیر فقط از انواع تعریفشده JSON استفاده میکنند.
نمونه JSON نامعتبر و دلیل خطا
{
name: "سارا",
"active": True,
"roles": ["editor", "author",],
}
| بخش | خطا | نسخه درست |
|---|---|---|
name | کلید بدون کوتیشن است | "name" |
True | حروف بزرگ مجاز نیست | true |
| کامای بعد از author | Trailing comma در Array | حذف کامای آخر |
| کامای قبل از آکولاد پایانی | Trailing comma در Object | حذف کامای آخر |
تفاوت JSON Validator با Formatter و Viewer
| ابزار | وظیفه اصلی | آیا Syntax را تضمین میکند؟ |
|---|---|---|
| JSON Validator | تشخیص معتبر یا نامعتبر بودن JSON | بله، در محدوده Syntax |
| JSON Formatter | تورفتگی و خواناتر کردن متن | معمولاً برای Format کردن ابتدا Parse میکند، اما هدف اصلی نمایش است |
| JSON Viewer | نمایش ساختاری یا درختی داده | برای نمایش موفق معمولاً ورودی باید Parse شود |
| JSON Schema Validator | بررسی نوع، فیلدهای لازم و محدودیتها | هم Syntax و هم قرارداد Schema را میسنجد |
| Linter | قواعد سبک، کیفیت یا سیاست تیم | بسته به ابزار |
یک Formatter نباید جایگزین Schema Validator معرفی شود. ممکن است متن بدون خطای Syntax Format شود، اما فیلد age بهجای Number یک String باشد یا Property ضروری کاملاً وجود نداشته باشد.
خطاهای رایج که JSON Validator پیدا میکند
کوتیشن تکی بهجای کوتیشن دوتایی
{'name': 'Sara'}
JSON برخلاف بعضی Syntaxهای JavaScript فقط کوتیشن دوتایی را برای String میپذیرد.
کامای اضافه در انتهای Object یا Array
{
"id": 1,
"active": true,
}
Trailing comma در JSON استاندارد مجاز نیست، حتی اگر برخی زبانها آن را در Object literal بپذیرند.
نبود کاما میان اعضا
{
"id": 1
"name": "Sara"
}
بعد از پایان هر عضو، بهجز عضو آخر، باید کاما قرار بگیرد.
استفاده از مقدارهای JavaScript
{
"missing": undefined,
"value": NaN,
"limit": Infinity
}
undefined، NaN و Infinity جزء انواع JSON نیستند. معمولاً باید از null، String یا قرارداد صریح دیگری استفاده شود.
Escape نادرست در String
{
"path": "C:\new\files"
}
Backslash آغاز Escape است. برای نمایش خود Backslash باید آن را دو بار نوشت: "C:\\new\\files". خط جدید واقعی داخل String نیز باید با \n نمایش داده شود.
عدد با فرمت نامعتبر
{
"price": 01.50,
"hex": 0xFF,
"total": 12.
}
Leading zero، عدد Hex و نقطه بدون رقم بعد از آن در Number استاندارد JSON مجاز نیستند. نمونههای معتبر شامل 0، -12، 12.5 و 6.02e23 هستند.
شماره خط و ستون خطا را چگونه بخوانیم؟
پیامهایی مانند Unexpected token، Expected ',' or '}' یا Unterminated string معمولاً خط و ستون نزدیک محل تشخیص خطا را میدهند. محل گزارششده همیشه علت اصلی نیست. برای مثال کامای جاافتاده در خط قبل ممکن است هنگام رسیدن Parser به کلید خط بعدی آشکار شود.
- ابتدا خط گزارششده را ببینید.
- یک یا دو خط قبل از آن را نیز بررسی کنید.
- جفت آکولاد و براکت را کنترل کنید.
- کوتیشنهای باز و Escapeهای قبل از محل خطا را بررسی کنید.
- پس از اصلاح، کل سند را دوباره Validate کنید.
اعتبارسنجی JSON در JavaScript
در JavaScript، روش پایه استفاده از JSON.parse() داخل try...catch است:
function validateJson(text) {
try {
const value = JSON.parse(text);
return { valid: true, value, error: null };
} catch (error) {
return {
valid: false,
value: null,
error: error instanceof Error ? error.message : "Invalid JSON"
};
}
}
این تابع Syntax را بررسی میکند و در حالت موفق مقدار Parseشده را برمیگرداند. برای ورودیهای غیرقابل اعتماد، اندازه متن را پیش از Parse محدود کنید تا مصرف حافظه کنترل شود.
چرا Regex برای اعتبارسنجی کامل JSON مناسب نیست؟
JSON ساختاری تودرتو با Escape، Unicode و Number grammar دارد. یک Regex ساده ممکن است نمونههای نامعتبر را قبول یا نمونههای معتبر را رد کند. Parser استاندارد هم دقیقتر است و هم رفتار قابل پیشبینیتری دارد.
اعتبارسنجی JSON در Python
import json
def validate_json(text: str) -> dict:
try:
value = json.loads(text)
return {"valid": True, "value": value, "error": None}
except json.JSONDecodeError as exc:
return {
"valid": False,
"value": None,
"error": exc.msg,
"line": exc.lineno,
"column": exc.colno,
"position": exc.pos,
}
JSONDecodeError اطلاعات خط، ستون و Offset را میدهد. توجه کنید بعضی Parserها گزینههای غیرسختگیرانه دارند؛ برای بررسی JSON استاندارد، تنظیمات permissive را بدون نیاز فعال نکنید.
اعتبارسنجی JSON در C#
using System.Text.Json;
static bool IsValidJson(string text, out string? error)
{
try
{
using JsonDocument document = JsonDocument.Parse(text);
error = null;
return true;
}
catch (JsonException ex)
{
error = $"{ex.Message} Line: {ex.LineNumber}, Byte: {ex.BytePositionInLine}";
return false;
}
}
در APIهای ASP.NET بهتر است محدودیت اندازه Body، عمق و مدیریت خطا نیز تنظیم شود. پیام خام Exception داخلی را بدون کنترل به Client نمایش ندهید.
اعتبارسنجی JSON در Java
در Java معمولاً Parser کتابخانه انتخابی برای Validate کردن استفاده میشود. نمونه مفهومی با Jackson:
ObjectMapper mapper = new ObjectMapper();
try {
JsonNode value = mapper.readTree(jsonText);
System.out.println("Valid JSON");
} catch (JsonProcessingException ex) {
System.out.println(ex.getOriginalMessage());
}
تنظیمات کتابخانه را بررسی کنید؛ بعضی قابلیتها مانند پذیرفتن Comment یا کوتیشن تکی میتوانند Parser را از JSON استاندارد دور کنند.
JSON معتبر است اما برنامه آن را نمیپذیرد؛ چرا؟
این یکی از مهمترین تفاوتهاست. متن زیر از نظر Syntax کاملاً معتبر است:
{
"email": 123,
"age": -500,
"roles": "admin"
}
اما یک API ممکن است انتظار داشته باشد email String با فرمت ایمیل، age عددی در بازه معقول و roles یک Array باشد. برای این سطح از کنترل باید JSON Schema، DTO validation یا قواعد Domain اجرا شوند.
| سطح بررسی | پرسش | ابزار مناسب |
|---|---|---|
| Syntax | آیا متن قابل Parse است؟ | JSON Validator یا Parser |
| Schema | آیا فیلدها و نوعها مطابق قراردادند؟ | JSON Schema Validator |
| Semantic | آیا مقدارها در دنیای واقعی معنی دارند؟ | قواعد برنامه |
| Security | آیا استفاده از داده امن است؟ | اعتبارسنجی ورودی و سیاست امنیتی |
رفع خطای JSON به روش مرحلهای
- ورودی اصلی را بدون تغییر در Validator قرار دهید.
- اولین خطای Syntax را اصلاح کنید؛ خطاهای بعدی ممکن است پیامد همان خطا باشند.
- اگر سند بزرگ است، بخش مشکوک را با حفظ ساختار جدا کنید.
- تفاوت کوتیشنهای هوشمند و ASCII را بررسی کنید؛
“و”جای"را نمیگیرند. - نویسههای پنهان، BOM یا Control character را بررسی کنید.
- پس از معتبر شدن Syntax، Schema و قواعد تجاری را جداگانه اجرا کنید.
- نسخه اصلاحشده را با تست خودکار یا Contract test تثبیت کنید.
Validation فایلهای بزرگ JSON
خواندن یک فایل چندصد مگابایتی بهصورت یک String میتواند حافظه زیادی مصرف کند. برای دادههای بزرگ، Parser جریانمحور مناسبتر است؛ این Parser ورودی را Token به Token میخواند و لازم نیست کل درخت همزمان در حافظه باشد.
- حداکثر اندازه ورودی را مشخص کنید.
- حداکثر عمق Nesting را محدود کنید.
- برای مجموعههای پیوسته، NDJSON یا JSON Lines را بررسی کنید.
- خطا را همراه Offset یا شماره رکورد گزارش کنید.
- برای فایلهای آپلودی Timeout و محدودیت منابع داشته باشید.
امنیت JSON Validator آنلاین
قرار دادن داده در یک Validator آنلاین به معنی ارسال یا پردازش آن در محیط ابزار است. برای Token، اطلاعات مشتری، کلید API، رمز عبور، داده پزشکی یا اطلاعات تجاری باید سیاست حریم خصوصی و شیوه پردازش ابزار مشخص باشد. حتی JSON معتبر ممکن است حاوی داده بسیار حساس باشد.
- اطلاعات محرمانه را قبل از Paste کردن حذف یا Mask کنید.
- برای داده حساس از ابزار Local یا پردازش سمت Client استفاده کنید.
- به معتبر بودن Syntax بهعنوان نشانه امن بودن محتوا اعتماد نکنید.
- خروجی JSON را مستقیم و بدون Escape در HTML قرار ندهید.
- عمق زیاد و ورودی حجیم را برای جلوگیری از مصرف منابع محدود کنید.
آیا Comment در JSON معتبر است؟
JSON استاندارد Comment ندارد. نمونه زیر نامعتبر است:
{
// user identifier
"id": 42
}
برخی فایلهای تنظیمات از JSONC یا قالبهای شبیه JSON استفاده میکنند که Comment را میپذیرند. این فرمتها را نباید بدون توضیح JSON استاندارد نامید، چون Parser سختگیر ممکن است آنها را رد کند.
Duplicate Key در JSON چه وضعیتی دارد؟
{
"role": "user",
"role": "admin"
}
بعضی Parserها آخرین مقدار را نگه میدارند، بعضی اولین مقدار را و بعضی میتوانند خطا دهند. بهدلیل رفتار ناسازگار، کلید تکراری را باید خطای کیفیت داده در نظر گرفت. Validator حرفهای بهتر است علاوه بر Parse، Duplicate key را نیز گزارش کند.
Best Practiceهای اعتبارسنجی JSON
- از Parser استاندارد همان Runtime استفاده کنید.
- حالت سختگیر را برای JSON استاندارد انتخاب کنید.
- Syntax validation را از Schema validation جدا بدانید.
- پیام خطا را با خط، ستون و Context محدود نمایش دهید.
- ورودی را پیش از Parse از نظر اندازه و عمق محدود کنید.
- کلیدهای تکراری را در Pipeline کیفیت داده بررسی کنید.
- نمونههای مرزی مانند Unicode، Escape، Number و Nesting را تست کنید.
- پس از اصلاح، کل سند را دوباره Validate کنید.
چکلیست JSON معتبر
- ریشه یک مقدار JSON کامل است.
- همه کلیدهای Object داخل کوتیشن دوتاییاند.
- Stringها با کوتیشن دوتایی بسته شدهاند.
- کاما فقط میان اعضا قرار دارد.
- آکولادها و براکتها جفت هستند.
- فقط
true،falseوnullبا حروف کوچک استفاده شدهاند. - عددها Leading zero، Hex یا Infinity ندارند.
- Backslash و Control characterها درست Escape شدهاند.
- پس از پایان مقدار ریشه متن اضافه وجود ندارد.
- پس از Syntax، Schema و قواعد برنامه نیز بررسی شدهاند.
پرسشهای متداول درباره JSON Validator
آیا JSON Validator میتواند نوع اشتباه یک فیلد را پیدا کند؟
Validator نحوی فقط وقتی نوع باعث شکستن Syntax شود خطا میدهد. برای تشخیص اینکه مثلاً age باید Number باشد اما String آمده، به JSON Schema یا Validation مدل نیاز است.
چرا JSON در JavaScript اجرا میشود اما Validator آن را رد میکند؟
احتمالاً ورودی یک JavaScript object literal است، نه JSON استاندارد. JavaScript ممکن است کلید بدون کوتیشن، کوتیشن تکی، undefined یا Trailing comma را بپذیرد؛ JSON این موارد را نمیپذیرد.
آیا Pretty شدن JSON یعنی معتبر است؟
اگر Formatter برای تولید خروجی از Parser سختگیر استفاده کرده باشد، موفقیت آن نشانه معتبر بودن Syntax است؛ اما هنوز Schema، معنی داده و امنیت بررسی نشدهاند.
آیا JSON خالی معتبر است؟
رشته خالی معتبر نیست. اما Object خالی {}، Array خالی []، String خالی "" و حتی مقدار null از نظر Grammar مقدار JSON معتبرند. اینکه برنامه آنها را بپذیرد به قرارداد API بستگی دارد.
آیا ترتیب کلیدها در اعتبار JSON اثر دارد؟
خیر. ترتیب Propertyهای Object اعتبار نحوی را تغییر نمیدهد و برنامه نباید معنی داده را به ترتیب کلیدها وابسته کند. Array برعکس، ترتیب عناصر را حفظ میکند.
بهترین روش اعتبارسنجی JSON در Backend چیست؟
ابتدا با Parser استاندارد و محدودیت اندازه و عمق، Syntax را بررسی کنید؛ سپس داده را به DTO یا Schema مشخص نگاشت کرده و قواعد نوع، بازه، الزامی بودن و منطق Domain را اجرا کنید.
جمعبندی
JSON Validator اولین خط دفاع برای تشخیص خطاهای نحوی JSON است: کوتیشن اشتباه، کامای اضافه، براکت بستهنشده، Number نامعتبر و Escape خراب. برای نتیجه قابل اعتماد باید از Parser استاندارد و حالت سختگیر استفاده کرد، پیام خطا را با خط و ستون خواند و پس از هر اصلاح کل سند را دوباره Validate کرد. بااینحال Syntax معتبر فقط آغاز کار است؛ Schema، منطق داده، محدودیت منابع و امنیت باید در مراحل جداگانه بررسی شوند.
اعتبارسنجی JSON با ابزار xDFlow
متن یا فایل JSON خود را در ابزار JSON Validator قرار دهید تا معتبر بودن Syntax و محل خطاهای احتمالی را سریع بررسی کنید. پس از رفع خطا، برای خواناتر شدن داده میتوانید از Formatter و برای بررسی قرارداد فیلدها از Schema Validator استفاده کنید.