اپنا JSON چیک کریں
صرف درست یا غلط نہیں — لائن، کالم، حرف، اور اس کا حل۔ کچھ بھی محفوظ نہیں کیا جاتا؛ جانچ یہیں ہوتی ہے۔
- کبھی محفوظ نہیں کی جاتی
- نہ قطار، نہ انتظار
- نہ سائن اپ، نہ واٹر مارک
JSON پیسٹ کریں، ٹائپ کرتے ہی اس کی جانچ ہوتی ہے۔
یہ کیسے کام کرتا ہے
اپنا JSON پیسٹ کریں
یا فائل ڈراپ کریں۔ یہ وہیں پڑھی جاتی ہے جہاں ہے؛ کچھ بھی کہیں نہیں بھیجا جاتا۔
نتیجہ پڑھیں
درست، اور ساتھ میں اس کے اندر موجود چیزوں کی گنتی۔ یا غلط، اور بالکل درست جگہ پر نشان۔
ٹھیک کریں اور دوبارہ چیک کریں
وہیں ایڈٹ کریں اور جواب ٹائپ کرتے ہی اپ ڈیٹ ہوتا ہے۔
JSON اصل میں کن چیزوں کی اجازت نہیں دیتا
JSON کی گرامر جان بوجھ کر بہت مختصر ہے، اور تقریباً ہر ویلیڈیشن کی ناکامی ان چند چیزوں میں سے ایک ہوتی ہے جو لوگ JavaScript سے لے آتے ہیں اور JSON نے کبھی نہیں اپنائیں۔ آخری عنصر کے بعد ٹریلنگ کوما۔ ڈبل کے بجائے سنگل کوٹس۔ بغیر کوٹس والی کیز۔ کمنٹس — JSON میں کوئی نہیں، اور کبھی تھے بھی نہیں۔ NaN اور Infinity، جو درست JavaScript نمبرز ہیں مگر درست JSON نہیں۔ اور شروع میں byte order mark، جو ہر ایڈیٹر میں نظر نہیں آتا، جسے کچھ Windows ٹولز UTF-8 میں محفوظ کرتے وقت شامل کر دیتے ہیں، اور جس کی وجہ سے ایک بالکل ٹھیک دستاویز اپنے پہلے ہی حرف پر ناکام ہو جاتی ہے۔
دو چیزیں جائز ہیں اور پھر بھی مسئلہ پیدا کریں گی، اسی لیے “درست” ہونا “صحیح” ہونے جیسا نہیں۔ ڈپلیکیٹ کیز کی ممانعت نہیں اسپیسیفکیشن میں — اور ہر پارسر انہیں مختلف طریقے سے حل کرتا ہے، زیادہ تر آخری والی لیتے ہیں، اس لیے دہرائی گئی کی والی دستاویز یہاں درست ٹھہرتی ہے اور مختلف زبانوں میں مختلف معنی رکھتی ہے۔ اور JSON میں نمبرز کی درستگی کی کوئی طے شدہ حد نہیں، جبکہ زیادہ تر پارسرز انہیں floating point کے طور پر پڑھتے ہیں: تقریباً نو quadrillion سے بڑا پورا نمبر خاموشی سے راؤنڈ ہو جاتا ہے، اسی لیے بڑے identifiers اکثر اسٹرنگز کے طور پر رکھے جاتے ہیں۔
آپ کو وہ بالکل درست لائن، کالم اور حرف واپس ملتا ہے جہاں پارسنگ رکی، جو عموماً خود پیغام سے زیادہ مفید ہوتا ہے۔ پارسر وہ مقام بتاتا ہے جہاں دستاویز کا مطلب بننا بند ہوا، وہ نہیں جہاں غلطی ہوئی — غائب closing brace فائل کے آخر میں بتایا جاتا ہے، اور غائب کوما اس کے بعد والے ٹوکن پر۔ بتائے گئے مقام سے ذرا پہلے دیکھنے کی عادت سب سے زیادہ وقت بچاتی ہے۔
درست ساخت ہونا صحیح ہونے جیسا نہیں، اور یہ فرق اہم ہے۔ یہ تصدیق کرتا ہے کہ سنٹیکس پارس ہوتا ہے۔ دستاویز میں آپ کی API کے مطلوبہ فیلڈز ہیں یا نہیں، کوئی ویلیو حد میں ہے یا نہیں، کوئی تاریخ واقعی تاریخ ہے یا نہیں — ان میں سے کوئی بھی JSON کا سوال نہیں۔ یہ اسکیما ویلیڈیشن ہے، اس کے لیے اسکیما چاہیے، اور ایک دستاویز یہاں بے عیب ہو کر بھی اس سروس سے فوراً رد ہو سکتی ہے جسے آپ اسے بھیج رہے ہیں۔
جب آپ کو کچھ اور چاہیے
گرامر کے بجائے اسکیما کے مطابق دستاویزات جانچنے کے لیے JSON Schema معیار ہے اور ajv اس کی سب سے تیز امپلیمنٹیشن ہے — یہ بتائے گا کہ کوئی ضروری فیلڈ غائب ہے یا کوئی ویلیو حد سے باہر ہے، جو عموماً آپ کا اصل سوال ہوتا ہے۔ check-jsonschema یہی جانچ کمانڈ لائن اور CI میں چلاتا ہے۔
کمانڈ لائن پر کسی بھی کام کے لیے jq رکھنے والا ٹول ہے: jq empty file.json ویلیڈیٹ کرتا ہے اور کامیابی پر کچھ پرنٹ نہیں کرتا، جو اسکرپٹ کے لیے بالکل صحیح ہے، اور jq . فارمیٹ کرتا ہے۔ میموری میں نہ سما سکنے والی بڑی فائلوں کے لیے jq --stream اور Python کا ijson مرحلہ وار پارس کرتے ہیں، جو پوری دستاویز لوڈ کرنے والا کوئی صفحہ نہیں کر سکتا۔
اکثر پوچھے جانے والے سوالات
کیا میرا JSON کہیں محفوظ کیا جاتا ہے؟
نہیں۔ نہ کوئی سرور کال ہے نہ لاگنگ، اور کچھ بھی محفوظ نہیں کیا جاتا۔ صفحہ لوڈ ہونے کے بعد آپ انٹرنیٹ بند کر سکتے ہیں اور یہ کام کرتا رہتا ہے۔ یہاں یہ بات جتنی لگتی ہے اس سے زیادہ اہم ہے: لوگ آن لائن فارمیٹر میں API ریسپانسز، کنفیگ فائلیں اور ایرر پے لوڈز پیسٹ کرتے ہیں، اور ان میں اکثر ٹوکنز، کسٹمرز کے ریکارڈز اور اندرونی ہوسٹ نیمز ہوتے ہیں۔
JSON خراب ہو تو یہ مجھے کیا بتاتا ہے؟
لائن، کالم، خود وہ لائن جس میں بالکل درست حرف کے نیچے نشان (^) ہوتا ہے، اور یہ کہ وہاں کیا متوقع تھا۔ زیادہ تر JSON چار میں سے کسی ایک وجہ سے خراب ہوتا ہے — ٹریلنگ کوما، ڈبل کے بجائے سنگل کوٹس، بغیر کوٹس والی کی، یا اسٹرنگ کے اندر اصل نئی لائن — اور ان میں سے ہر ایک کا نام بتایا جاتا ہے، بجائے اس کے کہ اسے عام syntax error کہا جائے۔
درست کسے مانا جاتا ہے؟
RFC 8259، سختی سے۔ یعنی ڈبل کوٹس والی کیز، کوئی ٹریلنگ کوما نہیں، کوئی کمنٹس نہیں، اور نمبرز میں نہ شروع کے صفر نہ hex۔ سخت ہونا ہی ویلیڈیٹر کا مقصد ہے: اگر یہ وہ قبول کر لے جو آپ کا پارسر رد کرے گا تو اس نے آپ کو کچھ نہیں بتایا۔
کیا یہ میرے JSON کو اسکیما کے مطابق جانچتا ہے؟
نہیں — یہ سنٹیکس جانچتا ہے، جو الگ سوال ہے۔ سنٹیکس یہ ہے کہ ٹیکسٹ JSON ہے بھی یا نہیں۔ اسکیما یہ ہے کہ ڈیٹا میں صحیح فیلڈز اور ٹائپس ہیں یا نہیں۔ یہ صفحہ پہلے سوال کا جواب دیتا ہے؛ یہ بتائے گا کہ فائل پارس ہوتی ہے، اور جو ڈھانچہ ملا وہ دکھائے گا، لیکن یہ نہیں جانتا کہ آپ کے فیلڈز کیا ہونے چاہییں۔
جب میری API اسے پھر بھی رد کرتی ہے تو یہ درست کیوں کہتا ہے؟
کیونکہ درست JSON اور وہ JSON جو آپ کی API چاہتی ہے، دو الگ چیزیں ہیں۔ سنٹیکس کے لحاظ سے بے عیب دستاویز میں پھر بھی کوئی ضروری فیلڈ غائب ہو سکتا ہے، نمبر کی جگہ اسٹرنگ ہو سکتی ہے، یا چیزیں endpoint کی توقع سے مختلف طریقے سے nest ہو سکتی ہیں۔ یہ صفحہ جو ڈھانچے کا خلاصہ دکھاتا ہے اسے API کی دستاویزات کے سامنے رکھ کر پڑھیں — فرق عموماً فوراً نظر آ جاتا ہے۔
کیا بڑے نمبرز صحیح طرح جانچے جاتے ہیں؟
ہاں، ہندسہ بہ ہندسہ — زیادہ تر ویلیڈیٹرز انہیں خاموشی سے خراب کر دیتے ہیں۔ JavaScript نمبر ایک 64-bit فلوٹ ہے، اس لیے یہ صرف 9,007,199,254,740,991 تک کے پورے نمبرز بالکل درست رکھ سکتا ہے۔ اس سے بڑا کچھ بھی — Twitter/X پوسٹ ID، Discord snowflake، بینک اکاؤنٹ نمبر، 64-bit ڈیٹا بیس کی — `JSON.parse` سے گزرتے ہی اپنے آخری ہندسے کھو دیتا ہے۔ نمبر پھر بھی قابلِ یقین لگتا ہے، اور یہی اسے خطرناک بناتا ہے: 7205759403792793600 خاموشی سے 7205759403792793000 بن جاتا ہے۔ یہ صفحہ آپ کے پیسٹ کیے گئے ہندسے بالکل ویسے ہی رکھتا ہے، اور بتاتا ہے کہ اسے کتنے نمبرز بچانے پڑے۔
کیا سائز کی کوئی حد ہے؟
دستیاب میموری، ہماری لگائی ہوئی کوئی حد نہیں۔ چند میگابائٹ کی دستاویزات فوراً فارمیٹ ہو جاتی ہیں؛ بہت بڑی دستاویزات کی حد یہ ہے کہ ایک وقت میں کتنا رکھا جا سکتا ہے، ہماری طرف کی کوئی چیز نہیں۔
جاننا مفید ہے: یہ چیک کرتا ہے کہ JSON درست ساخت کا ہے، یہ نہیں کہ اس کا کوئی مطلب ہے۔ دستاویز بالکل درست ہو کر بھی وہ فیلڈز نہ رکھتی ہو جن کی آپ کی API توقع کرتی ہے — یہ اسکیما ویلیڈیشن ہے، جس کے لیے اسکیما چاہیے۔ یہاں آپ کو وہ بالکل درست لائن، کالم اور حرف ملتا ہے جہاں پارسنگ رکی۔
یہ ٹول اپنی ویب سائٹ پر لگائیں
کسی بھی بلاگ، کلاس پیج یا ہیلپ آرٹیکل کے لیے مفت۔ ایک اسنیپٹ پیسٹ کریں اور آپ کے وزیٹرز اسے سیدھا آپ کے صفحے پر استعمال کر سکیں گے۔