JSON ↔ YAML மாற்றம் என்றால் என்ன?
JSON (JavaScript Object Notation, RFC 8259) என்பது கட்டமைக்கப்பட்ட தரவுக்கான ஒரு கண்டிப்பான, brace-delimited உரை வடிவம்; YAML (YAML Ain't Markup Language, version 1.2) என்பது அதே மதிப்பு மாதிரிக்கு உள்தள்ளல், வரி இடைவெளிகள் மற்றும் மனித-படிக்கக்கூடிய தொடரியல்லைப் பயன்படுத்தும் JSON இன் superset. அவற்றுக்கிடையே மாற்றுவது ஒரே configuration ஐ machine-friendly வடிவம் (APIs, schema validation, programmatic transforms க்கு JSON) மற்றும் human-friendly வடிவம் (code review, Kubernetes manifests, GitHub Actions workflows க்கு YAML) இடையே ஒரு key மீண்டும் தட்டச்சு செய்யாமல் pivot செய்ய அனுமதிக்கிறது.
JSON ↔ YAML மாற்றம் எவ்வாறு வேலை செய்கிறது?
ஒவ்வொரு மாற்றமும் bundled js-yaml library (MIT, version 4.1.0) ஐப் பயன்படுத்தி உங்கள் உலாவியில் உள்ளூரில் இயங்குகிறது. உயர்மட்ட படிகள்:
- Mode selector (தானாக கண்டறி / JSON → YAML / YAML → JSON) எந்த pipeline இயங்கும் என்று தீர்மானிக்கிறது. தானாக கண்டறி mode ல் உள்ளீட்டின் முதல் non-whitespace எழுத்து திசையை தேர்ந்தெடுக்கிறது —
{அல்லது[JSON ஐ அர்த்தமாக்குகிறது; வேறு எதுவும் YAML ஐ அர்த்தமாக்குகிறது. - JSON → YAML:
JSON.parseஉள்ளீட்டை validate செய்து JavaScript மதிப்பு உருவாக்குகிறது;jsyaml.dump(value, { indent, lineWidth: -1, sortKeys: false })YAML 1.2 வடிவம் எழுதுகிறது. Multi-document இயக்கியிருந்தால், input array ஒவ்வொரு element ஒரு document ஆக dump செய்யப்பட்டு---separators உடன் இணைக்கப்படுகிறது. - YAML → JSON:
jsyaml.loadAllஉள்ளீட்டில் ஒவ்வொரு document ஐயும் (---separators தானாக கையாள்கிறது) ஒரு array ஆக பாகுபடுத்துகிறது; single-document உள்ளீடுகள் unwrap செய்யப்படுகின்றன, எனவே JSON வெளியீடு document தானே, ஒரு-element array அல்ல. - Indent (2 அல்லது 4 இடங்கள்) மற்றும் Pretty-print configurable. Pretty-print off ஆனால் whitespace இல்லாமல்
JSON.stringify(value)மூலம் minified JSON emit செய்கிறது. - வெளியீடு read-only textarea க்கு எழுதப்படுகிறது. YAML பாகுபடுத்தல் தோல்விகளில், error message
js-yamlஇன்e.markதெரிவிக்கும் 1-indexed வரி மற்றும் நெடுவரிசையை உள்ளடக்குகிறது.
இந்த கருவியுடன் JSON மற்றும் YAML ஐ ஏன் மாற்ற வேண்டும்?
- தனியுரிமை: ஒவ்வொரு பாகுபடுத்தல், transform மற்றும் emit பாஸும் உங்கள் உலாவியில் நடைபெறுகிறது. தரவு — Kubernetes secrets, signed JWTs மற்றும் proprietary configs உட்பட — எங்கள் சேவையகங்களை ஒருபோதும் அடைவதில்லை.
- Multi-document YAML:
jsyaml.loadAll---separators ஐ அங்கீகரிக்கிறது மற்றும் documents array திருப்பித் தருகிறது, converter single-doc cases ஐ unwrap செய்கிறது அல்லது multi-doc cases க்கு JSON array ஆக பாதுகாக்கிறது. - Anchors மற்றும் aliases resolved: YAML இன்
&anchor/*aliasmechanismjs-yamlஇன் default schema கையாளுகிறது. ஒரு முறை வரையறுக்கப்பட்டு இரண்டு முறை referenced மதிப்பு அனைத்து references சம மதிப்புகளை கொண்ட JSON object ஆக round-trip செய்கிறது. - CDN இல்லை, telemetry இல்லை:
js-yaml.min.jslibrary பக்கத்தின் அதே origin இலிருந்து ship ஆகிறது, எனவே கருவி offline, corporate proxies பின்னால் மற்றும் air-gapped சூழல்களில் வேலை செய்கிறது.
JSON ↔ YAML மாற்றத்தின் பொதுவான பயன்பாடுகள் என்ன?
JSON மற்றும் YAML இடையே pivot செய்வது DevOps, platform engineering மற்றும் API tooling முழுவதும் தோன்றுகிறது:
- Kubernetes manifests: ஒரு YAML
Deployment,ConfigMapஅல்லதுHelmReleaseஐ JSON க்கு மாற்றுவது, இதனால் in-house policy validator (Joi, Ajv, OPA Rego) programmatically lint செய்யலாம், பிறகு cluster apply க்கு YAML க்கு திரும்புவது. - CI/CD workflows: code-generator matrix அல்லது job dependencies மீண்டும் எழுத JSON மூலம் GitHub Actions
workflow.ymlround-trip செய்து, பிறகு PR க்கு cleaned-up YAML emit செய்வது. - OpenAPI specs: backend இன் auto-generated docs இலிருந்து JSON
openapi.jsonஒட்டி, repo க்கு check 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 mode ல் CONVERT அழுத்துவது முதல் வரியில் apiVersion: apps/v1 உடன் எட்டு வரி indented YAML உருவாக்குகிறது. அந்த YAML ஐ YAML → JSON mode ல் Pretty-print இயக்கியிருந்தால் மீண்டும் சேர்ப்பது stable JSON.stringify(value, null, 2) பிறகு original object ஐ byte-for-byte திருப்பித் தருகிறது.
இந்த JSON ↔ YAML மாற்றி முழுவதும் என் உலாவியில் இயங்குகிறதா?
ஆம். ஒவ்வொரு பாகுபடுத்தல், transform மற்றும் emit பாஸும் உங்கள் உலாவி tab க்குள் JavaScript ஆக உள்ளூரில் இயங்குகிறது. Bundled js-yaml library பக்கத்தின் அதே origin இலிருந்து ship ஆகிறது — CDN இல்லை, fetch இல்லை, XMLHttpRequest இல்லை, உள்ளீட்டில் navigator.sendBeacon இல்லை. Kubernetes secrets, JWT payloads, signed CloudFormation YAMLs மற்றும் proprietary configs உங்கள் சாதனத்தில் இருக்கும்.
Converter multi-document YAML ஐ எவ்வாறு கையாளுகிறது?
YAML --- மட்டும் கொண்ட வரிகளால் பிரிக்கப்பட்ட ஒரு stream ல் பல documents ஆதரிக்கிறது. YAML → JSON ல் converter jsyaml.loadAll அழைக்கிறது, அது ஒவ்வொரு document ஐயும் JavaScript மதிப்பாக திருப்பித் தருகிறது. சரியாக ஒரு document கண்டறியப்பட்டால் JSON வெளியீடு அந்த document நேரடியாக; இரண்டு அல்லது அதிகமாக இருந்தால் JSON வெளியீடு ஒரு array. JSON → YAML ல், உள்ளீடு JSON array ஆக இருக்கும்போது மற்றும் Multi-document toggle இயக்கியிருக்கும்போது, ஒவ்வொரு array element உம் --- separators உடன் அதன் சொந்த document ஆக emit ஆகிறது.
YAML anchors மற்றும் aliases ஆதரிக்கப்படுகிறதா?
ஆம் — &anchor definitions மற்றும் *alias references load படி போது js-yaml இன் default schema ஆல் resolve செய்யப்படுகின்றன. defaults: &d\n retries: 3\n timeout: 30\njob_a:\n <<: *d\njob_b:\n <<: *d போன்ற YAML உள்ளீடு job_a மற்றும் job_b இரண்டும் retries: 3, timeout: 30 கொண்ட JSON object ஆக பாகுபடுத்துகிறது.
JSON க்கும் மீண்டும் மாற்றும்போது YAML comments பாதுகாக்கப்படுகிறதா?
இல்லை — js-yaml parse படி போது comments strip செய்கிறது, எனவே YAML → JSON → YAML round-trip ஒவ்வொரு #-prefixed வரியையும் இழக்கும். இது load/dump மாதிரியின் ஒரு அறிவிக்கப்பட்ட குறைபாடு. பெரும்பாலான config-conversion workflows க்கு trade-off ஏற்றுக்கொள்ளக்கூடியது: round-tripped YAML ஒவ்வொரு key, மதிப்பு, anchor மற்றும் alias பாதுகாக்கிறது, human-authored comments மட்டுமே இல்லாமல்.
Custom YAML tags க்கு என்ன நடக்கும்?
Converter js-yaml இன் DEFAULT_SCHEMA பயன்படுத்துகிறது, இது !!str, !!int, !!float, !!bool, !!null, !!seq, !!map, !!binary மற்றும் !!timestamp புரிகிறது. Custom அல்லது application-specific tags (எ.கா. CloudFormation ல் !Ref, Ansible ல் !vault) அங்கீகரிக்கப்படவில்லை மற்றும் ஆதரிக்கப்படாத tag ஐ குறிப்பிடும் தெளிவான பிழையாக surface ஆகும். CloudFormation க்கு குறிப்பாக, இந்த converter ல் ஒட்டுவதற்கு முன்பு custom tags விரிவாக்க aws cloudformation package + --output-template-file flow பயன்படுத்தவும்.
இந்த JSON ↔ YAML மாற்றி அதே origin ல் bundle செய்யப்பட்ட js-yaml@4.1.0 உடன் ship ஆகிறது, multi-document streams மற்றும் anchors/aliases out of the box ஆதரிக்கிறது, மற்றும் YAML பாகுபடுத்தல் பிழைகளை line மற்றும் column உடன் தெரிவிக்கிறது. பதிவேற்றம் இல்லை, CDN இல்லை, telemetry இல்லை — ஒவ்வொரு byte உம் உங்கள் உலாவியில் இருக்கும்.