اپنے براؤزر میں JSON کو YAML اور YAML کو JSON میں تبدیل کریں
JSON اور YAML ایک ہی طرح کے ڈیٹا کو بیان کرتے ہیں — تہہ دار میپس، فہرستیں، سٹرنگز، نمبرز، اور بولینز — مگر وہ بہت مختلف نظر آتے ہیں اور مختلف جگہوں پر استعمال ہوتے ہیں۔ اگر آپ APIs، کنٹینر فائلوں، یا CI پائپ لائنوں کے قریب کوئی وقت گزارتے ہیں، تو آخرکار آپ کو ایک کو دوسرے میں بدلنا پڑتا ہے۔ یہ صفحہ یہ تبدیلی دونوں سمتوں میں کرتا ہے، مکمل طور پر آپ کے براؤزر کے اندر، اس لیے آپ جو ڈیٹا پیسٹ کرتے ہیں وہ کبھی آپ کی مشین سے باہر نہیں جاتا۔

JSON کیا ہے اور یہ کہاں رہتا ہے
JSON (JavaScript Object Notation) ایک سخت، بریکٹ اور بریس پر مبنی فارمیٹ ہے جو پہلے مشینوں کے لیے بنایا گیا۔ ہر آبجیکٹ {} میں لپٹا ہوتا ہے، ہر اری [] میں، کلیدیں اور سٹرنگ قدریں ڈبل کوٹڈ ہوتی ہیں، اور آئٹمز کاما سے الگ ہوتے ہیں۔ یہ REST اور GraphQL APIs کا ڈیفالٹ وائر فارمیٹ ہے، زیادہ تر ویب ہکس کا باڈی، NoSQL دستاویزات کی شکل، اور وہ چیز جو آپ کی fetch کال واپس کرتی ہے۔ تقریباً ہر زبان اسے بغیر کسی اضافی کوشش کے پارس کرتی ہے، یہی وجہ ہے کہ اس نے API پرت جیت لی: JavaScript میں JSON.parse، Python کی معیاری لائبریری میں json، اور ہر جگہ اس کے مساوی۔ سمجھوتہ یہ ہے کہ JSON ہاتھ سے لکھنے میں طویل ہے اور تبصروں کی اجازت نہیں دیتا، اس لیے یہ ایسی فائل کے لیے کمزور فارمیٹ ہے جسے کوئی انسان سارا دن ایڈٹ کرے۔
YAML کیا ہے اور یہ کہاں رہتا ہے
YAML (YAML Ain't Markup Language) الٹی ترجیح کے لیے ڈیزائن کیا گیا تھا: پہلے انسان۔ یہ بریسز اور کوٹس چھوڑ دیتا ہے، تہہ بندی ظاہر کرنے کے لیے indentation استعمال کرتا ہے، اور آپ کو # کے ساتھ تبصرے لکھنے دیتا ہے۔ یہی پڑھنے کی آسانی وجہ ہے کہ یہ کنفیگریشن کی مشترکہ زبان بن گیا۔ Docker Compose فائلیں، Kubernetes مینی فیسٹس، GitHub Actions اور GitLab CI ورک فلوز، Ansible پلے بکس، اور بے شمار ایپ کنفیگ فائلیں سب YAML ہیں۔ ایک عام YAML دستاویز مساوی JSON سے نمایاں طور پر مختصر اور pull request میں diff کرنا کہیں آسان ہوتی ہے۔ اس خوبصورتی کی قیمت نزاکت ہے، جہاں تبدیلی دلچسپ ہو جاتی ہے۔
اہم کلیدی فرق
تین فرق تقریباً ہر تبدیلی کے فیصلے کو چلاتے ہیں۔ پہلا، YAML میں سفید جگہ اہم ہے اور JSON میں بے معنی۔ YAML ساخت ظاہر کرنے کے لیے اسپیسز — کبھی ٹیبز نہیں — استعمال کرتا ہے، اس لیے ایک غلط طور پر ترتیب شدہ اسپیس خاموشی سے دستاویز کا مطلب بدل سکتی ہے۔ JSON indentation کی بالکل پروا نہیں کرتا۔ دوسرا، YAML تبصروں کی حمایت کرتا ہے اور JSON نہیں کرتا۔ YAML میں کوئی بھی # تبصرہ JSON بناتے وقت غائب ہو جاتا ہے، کیونکہ اسے رکھنے کی کوئی جگہ نہیں۔ تیسرا، YAML میں زیادہ بھرپور، implicit قسم بندی ہے۔ یہ خوشی سے تاریخیں، ٹائم اسٹیمپس، اور کئی ہجوں میں null پڑھتا ہے، اور بغیر کوٹ شدہ قدروں سے قسموں کا اندازہ لگاتا ہے۔ JSON کا ایک چھوٹا، واضح قسم کا سیٹ ہے اور کوئی ابہام نہیں۔ یہ بھی نوٹ کریں کہ JSON تکنیکی طور پر YAML 1.2 کا ذیلی سیٹ ہے، یہی وجہ ہے کہ درست JSON عام طور پر YAML کے طور پر صاف طور پر پارس ہو جاتا ہے، مگر الٹا ضروری نہیں۔

تبدیلی کی مشکلات جن پر نظر رکھیں
Round-tripping ہمیشہ بغیر نقصان کے نہیں ہوتا، اور یہ جاننا فائدہ مند ہے کہ چیزیں کہاں ٹوٹتی ہیں:
- ناروے کا مسئلہ۔ YAML 1.1 قواعد کے تحت، بغیر کوٹ شدہ
NOبولینfalseکے طور پر پارس ہوتا ہے، اورyes،on، اورoffبھی بولینز بن جاتے ہیں۔ ایک ملکی کوڈ یا سوئچ لیبل آپ کے متوجہ ہونے سے پہلےtrue/falseمیں بدل سکتا ہے۔ ان قدروں کو کوٹ کریں جنہیں آپ سٹرنگز کے طور پر مراد لیتے ہیں۔ - نمبر کی جبری تبدیلی۔
3.10جیسا ورژن اپنا آخری صفر کھو کر3.1بن سکتا ہے، اور1.0ایک نمبر بن جاتا ہے حتیٰ کہ جب آپ متن چاہتے تھے۔ ورژن سٹرنگز اور IDs کو کوٹ کریں۔ - Anchors اور aliases غائب ہو جاتے ہیں۔ YAML کے
&anchorاور*aliasحوالوں کا JSON میں کوئی مساوی نہیں۔ ایک اچھا کنورٹر انہیں ان کی مکمل قدر میں پھیلا دیتا ہے، اس لیے ڈیٹا درست ہے مگر deduplication ختم ہو گئی — JSON سے YAML سے JSON اصل anchors دوبارہ نہیں بنائے گا۔ - تبصرے اور بلاک اسکیلرز۔ JSON کی طرف جاتے ہوئے تبصرے حذف ہو جاتے ہیں۔ کئی لائنوں والے بلاک اسکیلرز (
|اور>) عام JSON سٹرنگز میں\nescapes کے ساتھ تہہ ہو جاتے ہیں، اس لیے بصری فارمیٹنگ کا مقصد ختم ہو جاتا ہے۔ - واپس YAML جاتے وقت indentation۔ JSON indentation کو encode نہیں کرتا، اس لیے کنورٹر ایک مستقل انداز چنتا ہے۔ کسی ٹیب-حساس ٹول میں پیسٹ کرنے سے پہلے اس کا جائزہ لیں۔
مقامی-فقط کیوں اہم ہے
کنفیگ فائلیں اور API payloads بالکل وہی چیز ہیں جسے کسی بے ترتیب سرور پر اپلوڈ نہیں کیا جانا چاہیے: وہ اکثر hostnames، ٹوکنز، اندرونی سروس نام، یا کسٹمر ڈیٹا لے جاتی ہیں۔ یہ کنورٹر پارس-اور-emit کا مرحلہ آپ کے براؤزر میں JavaScript کے ساتھ چلاتا ہے۔ کچھ بھی بیک اینڈ کو نہیں بھیجا جاتا، کچھ بھی لاگ نہیں ہوتا، اور صفحہ لوڈ ہونے کے بعد ٹول آف لائن بھی کام کرتا ہے۔ Kubernetes کا سیکرٹ یا CI ورک فلو اس اعتماد کے ساتھ پیسٹ کریں کہ یہ آپ کی مشین پر رہے گا۔
متعلقہ ٹولنگ چاہیے؟ مکمل ڈیٹا کنورٹرز دیکھیں، بے ترتیب ان پٹ کو JSON فارمیٹر سے صاف کریں، اور جب بھی آپ کو API دنیا اور کنفیگ دنیا کے درمیان جانا ہو تو یہاں واپس آئیں۔
اکثر پوچھے جانے والے سوالات
کیا میرا ڈیٹا کہیں اپلوڈ ہوتا ہے؟
نہیں۔ تبدیلی مکمل طور پر آپ کے براؤزر میں مقامی JavaScript کا استعمال کرتے ہوئے ہوتی ہے۔ آپ کا JSON یا YAML کبھی کسی سرور کو نہیں بھیجا جاتا، اس لیے راز اور کنفیگ فائلیں نجی رہتی ہیں۔
میری YAML قدر true یا false غیر متوقع طور پر کیوں بدل گئی؟
YAML 1.1 بغیر کوٹ شدہ الفاظ جیسے yes، no، on، اور off کو بولینز سمجھتا ہے — ناروے کا مسئلہ۔ کسی بھی قدر کو کوٹس میں لپیٹیں جسے آپ سٹرنگ کے طور پر مراد لیتے ہیں تاکہ یہ تبدیلی کے دوران متن کے طور پر برقرار رہے۔
جب میں YAML کو JSON میں تبدیل کروں تو میرے تبصروں کا کیا ہوتا ہے؟
JSON میں تبصرے کا کوئی syntax نہیں، اس لیے تبدیلی کے دوران تمام hash تبصرے ہٹا دیے جاتے ہیں۔ اگر آپ کو نوٹس محفوظ رکھنے ہیں، تو اپنی مستند نقل YAML میں رکھیں۔
کیا YAML anchors اور aliases محفوظ رہتے ہیں؟
وہ اپنی مکمل قدروں میں پھیلا دیے جاتے ہیں کیونکہ JSON کا کوئی حوالہ میکانزم نہیں ہے۔ ڈیٹا درست رہتا ہے، مگر جب آپ واپس YAML میں تبدیل کرتے ہیں تو deduplication بحال نہیں ہوتا۔
کیا میں YAML کو JSON کے ساتھ ساتھ JSON کو YAML میں بھی تبدیل کر سکتا ہوں؟
جی ہاں، یہ ٹول دونوں سمتوں میں کام کرتا ہے۔ YAML حاصل کرنے کے لیے JSON پیسٹ کریں، یا JSON حاصل کرنے کے لیے YAML پیسٹ کریں، اور کنورٹر دوسرا فارمیٹ پہچان کر بناتا ہے۔
جب میں ٹیبز استعمال کرتا ہوں تو YAML کیوں ٹوٹتا ہے؟
YAML کو indentation کے لیے اسپیسز کی ضرورت ہے اور یہ ٹیبز کو رد کرتا ہے۔ اگر پیسٹ پارس کرنے میں ناکام ہو، تو ٹیب کریکٹرز کو اسپیسز سے بدلیں اور indentation کو مستقل رکھیں۔
