§

وہ JSON یا YAML پیسٹ کریں جسے آپ تبدیل کرنا چاہتے ہیں۔

موڈ
انڈینٹ
اختیارات
§

آؤٹ پٹ

yaml

Pakistan کے پلیٹ فارم انجینئرز روزانہ JSON اور YAML کے درمیان سوئچ کرتے ہیں۔ National IT Board کی cloud-native اقدامات نے Kubernetes کو سرکاری ڈویلپمنٹ کا حصہ بنایا، جبکہ NetSol Technologies اور Systems Limited اپنے بینکنگ پلیٹ فارمز Helm chart YAML کے ذریعے K8s پر چلاتے ہیں اور kubectl کے اندرونی JSON میں ہر apply کے دوران تبدیلی ہوتی ہے۔ PTA کے ٹیلی کام cloud regulations اور SECP کی cloud پر fintech regulations نے Easypaisa اور JazzCash جیسے فنٹیک کھلاڑیوں کو container platforms پر شفٹ کیا، جہاں OpenAPI specs اور GitHub Actions workflow YAML کوڈ ریویو میں JSON بنتے ہیں۔

JSON ↔ YAML کنورژن کیا ہے؟

JSON (JavaScript Object Notation، RFC 8259) منظم ڈیٹا کے لیے سخت، بریس سے محدود ٹیکسٹ فارمیٹ ہے؛ YAML (YAML Ain't Markup Language، ورژن 1.2) JSON کا ایک سپر سیٹ ہے جو اسی ویلیو ماڈل کے لیے انڈینٹیشن، لائن بریکس اور انسان کے قابل پڑھنے والی نحو استعمال کرتا ہے۔ ان کے درمیان تبدیلی آپ کو ایک ہی کنفگریشن کو مشین دوست شکل (APIs، schema validation، پروگرام ٹرانسفارمز کے لیے JSON) اور انسان دوست شکل (کوڈ ریویو، Kubernetes manifests، GitHub Actions workflows کے لیے YAML) کے درمیان منتقل کرنے دیتی ہے بغیر ایک بھی key دوبارہ ٹائپ کیے۔

JSON ↔ YAML کنورژن کیسے کام کرتی ہے؟

ہر کنورژن آپ کے براؤزر میں مقامی طور پر بنڈل شدہ js-yaml لائبریری (MIT، ورژن 4.1.0) کے ساتھ چلتی ہے۔ بلند سطحی اقدامات یہ ہیں:

  1. موڈ سلیکٹر (خودکار شناخت / JSON → YAML / YAML → JSON) فیصلہ کرتا ہے کہ کون سی پائپ لائن چلتی ہے۔ خودکار شناخت موڈ میں ان پٹ کا پہلا غیر خالی کریکٹر سمت چنتا ہے — { یا [ JSON کا مطلب ہے؛ باقی کچھ بھی YAML کا مطلب ہے۔
  2. JSON → YAML: JSON.parse ان پٹ کی تصدیق کرتا ہے اور ایک JavaScript ویلیو پیدا کرتا ہے؛ jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false }) YAML 1.2 شکل لکھتا ہے۔ ملٹی ڈاکومنٹ آن کے ساتھ، ان پٹ اری کو فی عنصر ایک ڈاکومنٹ کے طور پر ڈمپ کیا جاتا ہے اور --- علیحدہ کنندہ سے جوڑا جاتا ہے۔
  3. YAML → JSON: jsyaml.loadAll ان پٹ میں ہر ڈاکومنٹ کو پارس کرتا ہے (--- علیحدہ کنندہ کو خودکار طور پر سنبھالتا ہے) ایک اری میں؛ سنگل ڈاکومنٹ ان پٹس کو ان ریپ کیا جاتا ہے تاکہ JSON آؤٹ پٹ خود ڈاکومنٹ ہو، نہ کہ ایک عنصر کی اری۔
  4. انڈینٹ (2 یا 4 اسپیسز) اور خوبصورت پرنٹ قابل ترتیب ہیں۔ خوبصورت پرنٹ بند کرنے سے JSON.stringify(value) کے ذریعے بغیر کسی وائٹ اسپیس کے منی فائیڈ JSON خارج ہوتا ہے۔
  5. آؤٹ پٹ صرف پڑھنے والے ٹیکسٹ ایریا میں لکھا جاتا ہے۔ YAML پارس ناکامیوں پر، ایرر پیغام میں js-yaml کے e.mark کی رپورٹ کردہ 1 سے شروع ہونے والی لائن اور کالم شامل ہوتی ہے تاکہ آپ سیدھے باگ پر جا سکیں۔

اس ٹول سے JSON اور YAML کو کیوں بدلیں؟

  • رازداری: ہر پارس، ٹرانسفارم اور ایمیٹ آپ کے براؤزر میں ہوتا ہے۔ ڈیٹا — جس میں Kubernetes secrets، signed JWTs اور ملکیتی configs شامل ہیں — کبھی ہمارے سرورز تک نہیں پہنچتا۔
  • ملٹی ڈاکومنٹ YAML: jsyaml.loadAll --- علیحدہ کنندہ کو پہچانتا ہے اور ڈاکومنٹس کی اری واپس کرتا ہے، جسے کنورٹر سنگل ڈاکومنٹ کیسز کے لیے ان ریپ کرتا ہے یا ملٹی ڈاکومنٹ کیسز کے لیے JSON اری کے طور پر محفوظ کرتا ہے۔
  • اینکرز اور ایلیاز ریزولو: YAML کا &anchor / *alias طریقہ کار js-yaml کے ڈیفالٹ schema سے سنبھالا جاتا ہے۔ ایک بار متعین اور دو بار حوالہ دی گئی ویلیو ایک JSON آبجیکٹ میں راؤنڈ ٹرپ کرتی ہے جہاں تمام حوالے یکساں ویلیوز رکھتے ہیں۔
  • بغیر CDN، بغیر ٹیلیمیٹری: js-yaml.min.js لائبریری اسی origin سے بھیجی جاتی ہے جہاں سے صفحہ، تو ٹول آف لائن، corporate proxies کے پیچھے، اور air-gapped ماحول کے اندر کام کرتا ہے۔

JSON ↔ YAML کنورژن کے عام استعمال کیا ہیں؟

JSON اور YAML کے درمیان پلٹنا DevOps، پلیٹ فارم انجینئرنگ اور API ٹولنگ میں نظر آتا ہے:

  • Kubernetes manifests: YAML Deployment، ConfigMap، یا HelmRelease کو JSON میں تبدیل کرنا تاکہ ایک ان ہاؤس policy validator (Joi، Ajv، OPA Rego) اسے پروگرام طور پر لنٹ کر سکے، پھر کلسٹر apply کے لیے واپس YAML میں۔
  • CI/CD workflows: GitHub Actions workflow.yml کو JSON کے ذریعے راؤنڈ ٹرپ کرنا تاکہ کوڈ جنریٹر matrix یا job dependencies کو دوبارہ لکھ سکے، پھر PR کے لیے صاف کیا گیا YAML خارج کرنا۔
  • OpenAPI specs: بیک اینڈ کی خودکار طور پر تیار کردہ docs سے JSON openapi.json پیسٹ کرنا اور ریپو میں چیک کیے گئے انسانی ترمیم شدہ ریفرنس کے لیے openapi.yaml میں تبدیل کرنا۔

JSON ↔ YAML راؤنڈ ٹرپ کی مثال کیسی دکھتی ہے؟

{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}} پیسٹ کرنا اور JSON → YAML موڈ میں CONVERT دبانا آٹھ لائنوں کا انڈینٹ شدہ YAML پیدا کرتا ہے جس کی پہلی لائن پر apiVersion: apps/v1 ہوتا ہے۔ اس YAML کو YAML → JSON موڈ میں خوبصورت پرنٹ آن کے ساتھ واپس فیڈ کرنا ایک مستحکم JSON.stringify(value, null, 2) کے بعد اصل آبجیکٹ کو بائٹ بہ بائٹ واپس کرتا ہے، key آرڈر برقرار رہتا ہے کیونکہ js-yaml کا ڈیفالٹ schema دونوں اطراف میں insertion order کی پابندی کرتا ہے۔

کیا یہ JSON ↔ YAML کنورٹر مکمل طور پر میرے براؤزر میں چلتا ہے؟

ہاں۔ ہر پارس، ٹرانسفارم اور ایمیٹ آپ کے براؤزر ٹیب کے اندر JavaScript کے طور پر مقامی طور پر چلتا ہے۔ بنڈل شدہ js-yaml لائبریری اسی origin سے بھیجی جاتی ہے جہاں سے صفحہ — کوئی CDN نہیں، کوئی fetch نہیں، کوئی XMLHttpRequest نہیں، ان پٹ پر کوئی navigator.sendBeacon نہیں۔ ٹول صفحہ لوڈ ہونے کے بعد آف لائن بھی کام کرتا ہے، کیونکہ یہ ایک سٹیٹک HTML/CSS/JS بنڈل ہے جس کے ساتھ vendor لائبریری کی کاپی موجود ہے۔ Kubernetes secrets، JWT payloads، signed CloudFormation YAMLs، اور ملکیتی configs آپ کے ڈیوائس پر رہتے ہیں۔

کنورٹر ملٹی ڈاکومنٹ YAML کو کیسے سنبھالتا ہے؟

YAML ایک سٹریم میں متعدد ڈاکومنٹس کو سپورٹ کرتا ہے جو صرف --- پر مشتمل لائنوں سے علیحدہ ہوں۔ YAML → JSON پر کنورٹر jsyaml.loadAll کال کرتا ہے، جو ہر ڈاکومنٹ کو ایک JavaScript ویلیو کے طور پر واپس کرتا ہے۔ اگر بالکل ایک ڈاکومنٹ ملا تو JSON آؤٹ پٹ وہی ڈاکومنٹ براہ راست ہے؛ اگر دو یا زیادہ ملے تو JSON آؤٹ پٹ ایک اری ہے۔ JSON → YAML پر، جب ان پٹ JSON اری ہو اور ملٹی ڈاکومنٹ ٹوگل آن ہو، تو ہر اری عنصر کو اپنے ڈاکومنٹ کے طور پر --- علیحدہ کنندہ کے ساتھ خارج کیا جاتا ہے — JSON resources اری سے kubectl apply دوست بنڈل بنانے کے لیے مفید۔

کیا YAML اینکرز اور ایلیاز سپورٹ ہیں؟

ہاں — &anchor ڈیفینیشنز اور *alias حوالہ جات کو js-yaml کے ڈیفالٹ schema نے لوڈ مرحلے کے دوران ریزولو کیا ہے۔ defaults: &d\n retries: 3\n timeout: 30\njob_a:\n <<: *d\njob_b:\n <<: *d جیسا YAML ان پٹ ایک JSON آبجیکٹ میں پارس ہوتا ہے جہاں job_a اور job_b دونوں میں retries: 3, timeout: 30 ہوتا ہے۔ merge key << (YAML 1.1 ایکسٹینشن جسے js-yaml اب بھی احترام کرتا ہے) بھی ڈیفالٹ schema پر سپورٹ ہے۔

کیا YAML تبصرے JSON میں اور واپس تبدیل کرتے وقت محفوظ رہتے ہیں؟

نہیں — js-yaml پارس مرحلے کے دوران تبصرے ہٹا دیتا ہے، تو YAML → JSON → YAML راؤنڈ ٹرپ ہر # سے شروع ہونے والی لائن کھو دے گا۔ یہ load/dump ماڈل کی ایک معروف حد ہے؛ اگر تبصرہ تحفظ اہم ہے، تو js-yaml کی بجائے ایک تبصرہ آگاہ لائبریری استعمال کریں جیسے yaml npm پیکیج (جو trivia کو محفوظ رکھنے کے لیے ڈیزائن کردہ CST + AST API بھیجتا ہے)۔ زیادہ تر config-conversion workflows کے لیے یہ ٹریڈ آف قابل قبول ہے: راؤنڈ ٹرپ شدہ YAML ہر key، value، اینکر اور ایلیاز کو رکھتا ہے، صرف انسانی تحریر کردہ تبصروں کے بغیر۔

حسبِ ضرورت YAML ٹیگز کا کیا ہوتا ہے؟

کنورٹر js-yaml کا DEFAULT_SCHEMA استعمال کرتا ہے، جو !!str، !!int، !!float، !!bool، !!null، !!seq، !!map، !!binary، اور !!timestamp کو سمجھتا ہے — YAML 1.2 core اور JSON schemas میں ہر ٹیگ۔ حسبِ ضرورت یا ایپلیکیشن مخصوص ٹیگز (مثلاً CloudFormation میں !Ref، Ansible میں !vault) کو نہیں پہچانا جاتا اور وہ غیر سپورٹڈ ٹیگ کا حوالہ دیتے ہوئے واضح غلطی کے طور پر سامنے آتے ہیں۔ خاص طور پر CloudFormation کے لیے، اس کنورٹر میں پیسٹ کرنے سے پہلے حسبِ ضرورت ٹیگز کو expand کرنے کے لیے aws cloudformation package + --output-template-file flow استعمال کریں۔

یہ JSON ↔ YAML کنورٹر js-yaml@4.1.0 کے ساتھ اسی origin پر بنڈل ہو کر آتا ہے، باکس سے باہر ملٹی ڈاکومنٹ سٹریمز اور اینکرز/ایلیاز کو سپورٹ کرتا ہے، اور YAML پارس errors کو لائن اور کالم کے ساتھ رپورٹ کرتا ہے تاکہ آپ source کو ٹھیک کر سکیں۔ کوئی اپلوڈ نہیں، کوئی CDN نہیں، کوئی ٹیلیمیٹری نہیں — ہر بائٹ آپ کے براؤزر میں رہتا ہے۔