§

রূপান্তর করতে চান এমন JSON বা YAML পেস্ট করুন।

মোড
ইন্ডেন্ট
অপশন
§

আউটপুট

yaml

বাংলাদেশ ও পশ্চিমবঙ্গের DevOps ও platform টিমরা প্রতিদিন JSON ও YAML-এর মধ্যে যাতায়াত করেন। Kubernetes manifest YAML-এ লেখা হয় কিন্তু ভেতরে JSON হিসেবে consume হয়। GitHub Actions workflow YAML, OpenAPI স্পেসিফিকেশন, AWS CloudFormation template, এবং dbt `profiles.yml` ফাইল — সব code review-এ দুটো ফরম্যাটের মধ্যে বাঁকে। Helm chart YAML-কে schema validation-এর জন্য JSON-এ রূপান্তর, বা JSON API রেসপন্সকে YAML fixture-এর বিরুদ্ধে round-trip — এই টুলটি সব কাজ ব্রাউজারেই করে, কোনো ডেটা বাইরে পাঠায় না।

JSON ↔ YAML রূপান্তর কী?

JSON (JavaScript Object Notation, RFC 8259) হলো structured ডেটার জন্য একটি কঠোর, brace-সীমাবদ্ধ টেক্সট ফরম্যাট; YAML (YAML Ain't Markup Language, version 1.2) হলো JSON-এর একটি superset যা একই value model-এর জন্য indentation, line break, এবং human-readable সিনট্যাক্স ব্যবহার করে। তাদের মধ্যে রূপান্তর করা একই configuration-কে একটি machine-friendly form (API, schema validation, programmatic transform-এর জন্য JSON) এবং একটি human-friendly form (code review, Kubernetes manifest, GitHub Actions workflow-এর জন্য YAML) এর মধ্যে একটি key পুনরায় টাইপ না করে pivot করতে দেয়।

JSON ↔ YAML রূপান্তর কীভাবে কাজ করে?

প্রতিটি রূপান্তর bundled js-yaml লাইব্রেরি (MIT, version 4.1.0) ব্যবহার করে আপনার ব্রাউজারে locally চলে। উচ্চ-স্তরের ধাপ:

  1. মোড সিলেক্টর (স্বয়ংক্রিয় শনাক্তকরণ / JSON → YAML / YAML → JSON) কোন pipeline চলবে তা নির্ধারণ করে। স্বয়ংক্রিয় শনাক্তকরণ মোডে ইনপুটের প্রথম non-whitespace character দিক বেছে নেয় — { বা [ মানে JSON; অন্য কিছু মানে YAML।
  2. JSON → YAML: JSON.parse ইনপুট validate করে এবং JavaScript মান তৈরি করে; jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false }) YAML 1.2 form লেখে। Multi-document চালু থাকলে, input array এক element per document dump হয় এবং --- separator দিয়ে joined হয়।
  3. YAML → JSON: jsyaml.loadAll ইনপুটের প্রতিটি ডকুমেন্ট parse করে (--- separator স্বয়ংক্রিয়ভাবে handle করে) একটি array-তে; single-document ইনপুট unwrapped হয় তাই JSON আউটপুট ডকুমেন্ট নিজেই, one-element array নয়।
  4. Indent (২ বা ৪ স্পেস) এবং Pretty-print configurable। Pretty-print বন্ধ থাকলে কোনো whitespace ছাড়া JSON.stringify(value) দিয়ে minified JSON emit করে।
  5. আউটপুট read-only textarea-তে লেখা হয়। YAML parse ব্যর্থ হলে, error message-এ js-yaml-এর e.mark দ্বারা reported 1-indexed line ও column অন্তর্ভুক্ত থাকে যাতে সরাসরি bug-এ যেতে পারেন।

এই টুল দিয়ে JSON ও YAML কেন রূপান্তর করবেন?

  • গোপনীয়তা: প্রতিটি parse, transform, এবং emit pass আপনার ব্রাউজারে হয়। ডেটা — Kubernetes secret, signed JWT, এবং proprietary config সহ — কখনো আমাদের সার্ভারে পৌঁছায় না।
  • Multi-document YAML: jsyaml.loadAll --- separator চেনে এবং ডকুমেন্টের array ফেরত দেয়, converter single-doc ক্ষেত্রে unwrap করে বা multi-doc ক্ষেত্রে JSON array হিসেবে রাখে।
  • Anchor ও alias resolved: YAML-এর &anchor / *alias mechanism js-yaml-এর default schema দ্বারা handle হয়। একবার সংজ্ঞায়িত ও দুবার referenced মান JSON অবজেক্টে round-trip হয় যেখানে সব reference সমান মান ধরে।
  • কোনো CDN নেই, কোনো telemetry নেই: js-yaml.min.js লাইব্রেরি পেজের মতো একই origin থেকে shipped, তাই টুলটি offline, corporate proxy-র পেছনে, এবং air-gapped environment-এ কাজ করে।

JSON ↔ YAML রূপান্তরের সাধারণ প্রয়োগ কী?

JSON ও YAML-এর মধ্যে pivot করা DevOps, platform engineering, এবং API tooling জুড়ে দেখা যায়:

  • Kubernetes manifest: YAML Deployment, ConfigMap, বা HelmRelease-কে JSON-এ রূপান্তর করা যাতে in-house policy validator (Joi, Ajv, OPA Rego) programmatically lint করতে পারে, তারপর cluster apply-এর জন্য YAML-এ ফিরে।
  • CI/CD workflow: GitHub Actions workflow.yml-কে JSON-এর মাধ্যমে round-trip করা যাতে code-generator matrix বা job dependency পুনর্লিখন করতে পারে, তারপর PR-এর জন্য cleaned-up YAML emit করা।
  • OpenAPI spec: backend-এর auto-generated docs থেকে JSON openapi.json পেস্ট করা এবং repo-তে checked in human-edited reference-এর জন্য openapi.yaml-এ রূপান্তর করা।

একটি JSON ↔ YAML round-trip উদাহরণ কেমন দেখায়?

{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"web"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"web"}}}} পেস্ট করে JSON → YAML মোডে CONVERT চাপলে প্রথম লাইনে apiVersion: apps/v1 সহ আট লাইনের indented YAML তৈরি হয়। সেই YAML YAML → JSON মোডে Pretty-print চালু রেখে ফিরিয়ে দিলে stable JSON.stringify(value, null, 2)-এর পরে byte-for-byte মূল অবজেক্ট ফেরত আসে, key order preserved কারণ js-yaml-এর default schema উভয় দিকে insertion order মেনে চলে।

এই JSON ↔ YAML converter কি সম্পূর্ণ আমার ব্রাউজারে চলে?

হ্যাঁ। প্রতিটি parse, transform, এবং emit pass আপনার ব্রাউজার ট্যাবে JavaScript হিসেবে locally চলে। bundled js-yaml লাইব্রেরি পেজের মতো একই origin থেকে shipped — কোনো CDN নেই, কোনো fetch নেই, কোনো XMLHttpRequest নেই, ইনপুটে কোনো navigator.sendBeacon নেই। টুলটি পেজ লোড হলে offline-ও কাজ করে, কারণ এটি একটি static HTML/CSS/JS bundle সাথে vendor লাইব্রেরি copied। Kubernetes secret, JWT payload, signed CloudFormation YAML, এবং proprietary config আপনার ডিভাইসেই থাকে।

Converter multi-document YAML কীভাবে handle করে?

YAML শুধু --- ধারণকারী লাইন দ্বারা পৃথক একটি stream-এ একাধিক ডকুমেন্ট সমর্থন করে। YAML → JSON-এ converter jsyaml.loadAll কল করে, যা প্রতিটি ডকুমেন্ট JavaScript মান হিসেবে ফেরত দেয়। ঠিক একটি ডকুমেন্ট পাওয়া গেলে JSON আউটপুট সেই ডকুমেন্ট সরাসরি; দুই বা তার বেশি পাওয়া গেলে JSON আউটপুট একটি array। JSON → YAML-এ, ইনপুট JSON array হলে এবং Multi-document toggle চালু থাকলে, প্রতিটি array element তার নিজস্ব ডকুমেন্ট হিসেবে --- separator সহ emit হয় — JSON resource array থেকে kubectl apply-friendly bundle তৈরির জন্য দরকারী।

YAML anchor ও alias কি সমর্থিত?

হ্যাঁ — &anchor সংজ্ঞা ও *alias reference load ধাপে js-yaml-এর default schema দ্বারা resolve হয়। defaults: &d\n retries: 3\n timeout: 30\njob_a:\n <<: *d\njob_b:\n <<: *d-এর মতো YAML ইনপুট JSON অবজেক্টে parse হয় যেখানে job_ajob_b উভয়ই retries: 3, timeout: 30 ধারণ করে। merge key << (একটি YAML 1.1 extension যা js-yaml এখনো সমর্থন করে) default schema-তে সমর্থিত।

JSON-এ ও ফিরে রূপান্তরের সময় YAML comment কি preserved হয়?

না — js-yaml parse ধাপে comment strip করে, তাই YAML → JSON → YAML round-trip প্রতিটি #-prefixed লাইন হারাবে। এটি load/dump মডেলের একটি পরিচিত সীমাবদ্ধতা; comment preservation গুরুত্বপূর্ণ হলে js-yaml-এর পরিবর্তে yaml npm package ব্যবহার করুন (যা trivia preserve করার জন্য designed CST + AST API ship করে)। বেশিরভাগ config-conversion workflow-এর জন্য trade-off গ্রহণযোগ্য: round-tripped YAML মানব-রচিত comment ছাড়া প্রতিটি key, value, anchor, এবং alias রাখে।

Custom YAML tag-এর কী হয়?

Converter js-yaml-এর DEFAULT_SCHEMA ব্যবহার করে, যা !!str, !!int, !!float, !!bool, !!null, !!seq, !!map, !!binary, এবং !!timestamp বোঝে — YAML 1.2 core ও JSON schema-তে প্রতিটি tag। Custom বা application-specific tag (যেমন CloudFormation-এ !Ref, Ansible-এ !vault) চেনা যায় না এবং unsupported tag উল্লেখ করে একটি স্পষ্ট error হিসেবে আসে। CloudFormation-এর ক্ষেত্রে, এই converter-এ পেস্ট করার আগে custom tag প্রসারিত করতে aws cloudformation package + --output-template-file flow ব্যবহার করুন।

এই JSON ↔ YAML converter একই origin-এ bundled js-yaml@4.1.0 সহ ship করে, multi-document stream ও anchor/alias out of the box সমর্থন করে, এবং YAML parse error লাইন ও column সহ report করে যাতে source ঠিক করা যায়। কোনো আপলোড নেই, কোনো CDN নেই, কোনো telemetry নেই — প্রতিটি byte আপনার ব্রাউজারে থাকে।