यह पेज हिन्दी में दिखाया जा रहा है, क्योंकि आपका ब्राउज़र यही भाषा माँगता है।
इस पेज का कोड चालू नहीं हुआ।
index.html को सीधे किसी फ़ोल्डर से खोलने पर ब्राउज़र JavaScript मॉड्यूल रोक देता है, इसलिए कोई फ़ाइल चुनने पर कुछ नहीं होगा। इसके बजाय फ़ोल्डर को http पर सर्व कीजिए:
ऊपर फ़ाइल चुनते ही यह खुल जाएगा।तैयार — इंटरनेट काट दीजिए, यह फिर भी चलता रहेगा।इस ब्राउज़र में उपलब्ध नहीं (बाकी सब फिर भी चलता है)।ऑफ़लाइन कैश के लिए https:// या localhost चाहिए।यहाँ कैश नहीं हो सकता, पर अपलोड फिर भी कुछ नहीं होता।आपकी फ़ाइलें कहीं नहीं गईं। {total} फ़ाइलें लोड हुईं, और वे सब इसी साइट की अपनी हैं। {platform}किसी चीज़ ने {hosts} से संपर्क किया, और यह टूल ऐसा कभी नहीं करता। यह देखने लायक बात है। {platform}विज्ञापन, माप और दान वाले बटन के लिए साइट की अपनी स्क्रिप्ट {hosts} होस्ट से आईं। उनमें से किसी को न कोई फ़ाइल मिली, न उसका एक बाइट।विज्ञापन, माप और दान वाले बटन के लिए साइट की अपनी स्क्रिप्ट {hosts} होस्ट से आईं। उनमें से किसी को न कोई फ़ाइल मिली, न उसका एक बाइट।कुछ गड़बड़ हो गई: {detail}। दोबारा शुरू करने के लिए पेज फिर से लोड कीजिए।{count} फ़ाइल पढ़ी जा रही है…{count} फ़ाइलें पढ़ी जा रही हैं…कोई उदाहरण आज़माइएउदाहरण बनाया जा रहा है…यह ब्राउज़र उदाहरण नहीं बना सका। इसके बजाय कोई फ़ाइल चुनिए।
YAML से JSON — और JSON से वापस YAML
दोनों दिशाएँ, और हर दिशा की कीमत भी बताई जाती है। इनमें से कुछ भी किसी और के सर्वर में पेस्ट नहीं होता।
● यह टूल YAML और JSON फ़ाइलें कभी अपलोड नहीं करता। यहाँ कोई सर्वर है ही नहीं।
बदलना एक स्ट्रिंग पर की गई गणित है, और वह यहीं, इसी पेज पर होती है। दोनों पार्सर हाथ से लिखे हुए हैं और src/ में हैं — shared/parse-yaml.js और shared/parse-json.js — इसके अलावा कुछ नहीं। इस टूल में किसी भी तरह की नेटवर्क सुविधा है ही नहीं — न कुछ लाने को, न कुछ भेजने को — और यहाँ इसका वज़न इस साइट की लगभग हर दूसरी जगह से ज़्यादा है: एक YAML फ़ाइल आम तौर पर डिप्लॉयमेंट कॉन्फ़िग होती है, और डिप्लॉयमेंट कॉन्फ़िग आम तौर पर होस्टनेम, बकेट नाम और सीक्रेट से भरी होती है।
✗ कोई अपलोड नहीं
✗ कोई खाता नहीं
✗ साइज़ की कोई सीमा नहीं
✓ ऑफ़लाइन चलता है
✓ ओपन सोर्स
लाइव जाँच:जाँच जारी…
ऑफ़लाइन:जाँच जारी…
हमारी बात मानने की ज़रूरत नहीं: DevTools खोलिए, नेटवर्क टैब देखिए और कुछ बदलिए। किसी एक भी रिक्वेस्ट में आपके पेस्ट किए हुए का एक अक्षर नहीं जाता। या इंटरनेट काट दीजिए और फिर भी बदल लीजिए।
प्राइवेसी का यह दावा कैसे जाँचा जा सकता है
आप जो पेस्ट करते हैं उसके जाने की कोई जगह नहीं है। Content-Security-Policy में वे सारे पते लिखे हैं जिनसे यह पेज संपर्क कर सकता है, और उनमें से एक भी हमारा नहीं है। यहाँ ऐसा कोई एंडपॉइंट नहीं है जहाँ पेस्ट की गई कॉन्फ़िग इकट्ठी की जा सके, और होता भी तो कोड में ऐसा कुछ नहीं है जो उसे वहाँ भेजे।
यहाँ कुछ भी कहीं से कुछ नहीं लाता। पूरे src/ में कहीं कोई fetch, कोई XMLHttpRequest और कोई sendBeacon नहीं है। दोनों पार्सर और दोनों प्रिंटर इसी पेज के फ़ंक्शन हैं जो एक स्ट्रिंग लेते हैं और एक स्ट्रिंग लौटाते हैं।
यह YAML 1.2 पढ़ता है, इसलिए नॉर्वे नॉर्वे ही रहता है। YAML 1.1 में no एक बूलियन था, और यही वह मशहूर गड़बड़ी है जो नॉर्वे के देश कोड को false बना देती है। यहाँ 1.2 पढ़ा जाता है, जहाँ वह वही स्ट्रिंग है जैसा दिखता है। दूसरी दिशा में वे शब्द उद्धरण चिह्नों के साथ वापस लिखे जाते हैं, क्योंकि फ़ाइल को आगे जो खोलेगा वह अब भी 1.1 का रीडर हो सकता है। tests/js/text-convert.test.js दोनों हिस्से जाँचता है।
जो कन्वर्ज़न ईमानदार नहीं रह सकता, वह रुक जाता है। YAML में कोई ऐंकर, एलियस या टैग कन्वर्ज़न को इस संदेश के साथ खत्म कर देता है कि वह किस लाइन पर है, बजाय ऐसा JSON दस्तावेज़ देने के जो चुपचाप कुछ और मतलब रखता हो। JSON के पास “वही नोड दो बार” कहने का कोई तरीका नहीं है, और कोई एक व्याख्या चुनना आपके लिए फ़ैसला करना होगा।
गूगल क्या लोड करता है, और उसे क्या नहीं दिया जाता। विज्ञापन और माप वाली स्क्रिप्ट गूगल से आती हैं, और दान वाला बटन Buy Me a Coffee से। इनमें से किसी को भी आपके टेक्स्ट का एक अक्षर नहीं दिया जाता। जो भी लाइन उसे पढ़ती, पार्स करती या लिखती है, वह इसी ओरिजिन से आती है और रिपॉज़िटरी में दर्ज है।
यह ऑफ़लाइन चलता है। नेटवर्क काट दीजिए और टूल जस का तस रहता है, क्योंकि इसमें कभी नेटवर्क वाला कदम था ही नहीं। इससे आसान सबूत कोई नहीं।
खुद जाँच लीजिए। ऊपर लिखी किसी भी बात को भरोसे पर मानने की ज़रूरत नहीं। यह पेज रिपॉज़िटरी के टेम्पलेट और कॉन्फ़िग से बनता है, एक ऐसी बिल्ड स्क्रिप्ट के ज़रिए जिसे आप पढ़ भी सकते हैं और खुद चला भी सकते हैं। उसका नतीजा dist ब्रांच पर कमिट रहता है, यानी जो सर्व हो रहा है और सोर्स से बिल्ड करने पर जो बनता है, दोनों का फ़र्क आप खुद देख सकते हैं:
सबसे पहले पढ़ने लायक फ़ाइलें ये हैं — Content-Security-Policy के लिए config/site.toml, उस रीडर के लिए src/shared/parse-yaml.js जो किसी ऐंकर का मतलब अंदाज़ने के बजाय उसे मना कर देता है, और src/convert.js यह समझने के लिए कि एक कन्वर्ज़न सिर्फ़ एक पार्सर और एक प्रिंटर क्यों है, जिनके बीच ऐसा कुछ नहीं जो दोनों फ़ॉर्मैट एक साथ जानता हो।
अगर आपके दफ़्तर का सुरक्षा सॉफ़्टवेयर अपलोड की चेतावनी दे। वह उस पल पर नज़र रखता है जब ब्राउज़र में फ़ाइल चुनी जाती है, और यह नहीं जान सकता कि पन्ना उसे भेजने वाला है या नहीं — इसलिए चुनने पर ही चेतावनी देता है। यहाँ से कुछ नहीं भेजा जाता: ब्राउज़र के डेवलपर टूल खोलिए, Network पर जाइए, और एक फ़ाइल चुनिए। उसे ले जाने वाला कोई अनुरोध नहीं है, और पन्ने की अपनी स्थानीय झलक के अलावा कोई अनुरोध ही नहीं। यही जाँच आपकी IT टीम आधे मिनट में कर सकती है।
1 दिशा चुनिए
इंडेंट टैब सिर्फ़ JSON के लिए दिया जाता है। YAML स्पेस के हिसाब से तय होता है और उसमें टैब वैध इंडेंट नहीं है।
हर ऑब्जेक्ट की कुंजियाँ क्रम में लगा दीजिए कुंजियाँ जैसी पढ़ी जाती हैं उस हिसाब से, उनके कोड पॉइंट के हिसाब से नहीं, इसलिए item2item10 से पहले आता है।
{reason} (पंक्ति {line}, कॉलम {column})पाठ का अंतएक पंक्ति-विरामएक टैब«{ch}»अनपेक्षित: मान के अंत के बाद {found}पाठ समय से पहले खत्म हो गयाकुंजी को दोहरे उद्धरण चिह्नों वाली स्ट्रिंग होना चाहिए, और यह {found} हैकुंजी के बाद कोलन की उम्मीद थी, मिला {found}अनपेक्षित: {found}अल्पविराम या बंद करने वाला मझला कोष्ठक चाहिए था, मिला {found}अल्पविराम या बंद करने वाला वर्ग कोष्ठक चाहिए था, मिला {found}यह ऑब्जेक्ट कभी बंद ही नहीं होतायह ऐरे कभी बंद ही नहीं होतायह स्ट्रिंग कभी बंद ही नहीं होती\u के बाद चार हेक्साडेसिमल अंक आने चाहिए\{next} ऐसा एस्केप नहीं जिसे JSON जानता होस्ट्रिंग के भीतर एक कच्चा कंट्रोल कैरेक्टर — उसे एस्केप की तरह लिखिएयह ऐसी संख्या नहीं जिसकी JSON इजाज़त देता होयह पंक्ति उस ब्लॉक से कम हाशिये पर है जिसमें वह हैइस फ़ाइल में एक से ज़्यादा दस्तावेज़ हैं। उन्हें एक-एक करके बदलिए।यह पंक्ति ऊपर वाली कुंजी से ज़्यादा हाशिये पर हैयहाँ «key: value» की उम्मीद थीउपनाम (*name) समर्थित नहीं — JSON के पास «वही नोड दो बार» कहने का कोई तरीका ही नहींटैग (!name) समर्थित नहीं — प्रकार का अंदाज़ा लगाना पड़तायहाँ «?» कुंजी समर्थित नहीं«{header}» ऐसा ब्लॉक स्केलर नहीं जिसे यह पढ़ता होबंद करने वाले उद्धरण चिह्न के बाद और पाठ हैएंकर (&name) समर्थित नहीं — JSON के पास «वही नोड दो बार» कहने का कोई तरीका ही नहीं\{next} के बाद {width} हेक्साडेसिमल अंक चाहिए\{next} ऐसा एस्केप नहीं जिसे यह पढ़ता होउद्धरण चिह्नों वाली यह स्ट्रिंग कभी बंद ही नहीं होतीफ़्लो संग्रह के अंत के बाद और पाठ हैफ़्लो संग्रह समय से पहले खत्म हो जाता हैइस फ़्लो अनुक्रम में अल्पविराम या बंद करने वाला वर्ग कोष्ठक चाहिए थाइस फ़्लो मैपिंग में कुंजी के बाद कोलन चाहिए थाइस फ़्लो मैपिंग में अल्पविराम या बंद करने वाला मझला कोष्ठक चाहिए थाYAML से JSONJSON से YAMLटिप्पणियाँ खो जाती हैं, क्योंकि JSON के पास उन्हें रखने की जगह ही नहीं। एंकर, उपनाम और टैग अंदाज़े से भरे जाने के बजाय बदलाव को ही रोक देते हैं।कुछ नहीं खोता: हर JSON दस्तावेज़ पहले से ही एक YAML दस्तावेज़ है। स्ट्रिंग सिर्फ़ वहीं उद्धरण चिह्नों में रखी जाती है जहाँ उन्हें खुला छोड़ने से उनका मतलब बदल जाता।आपका YAMLआपका JSONYAML यहाँ पेस्ट कीजिए - या ऊपर कोई .yaml, .yml या .json फ़ाइल छोड़िए।JSON यहाँ पेस्ट कीजिए - या ऊपर कोई .json, .yaml या .yml फ़ाइल छोड़िए।{n} B{n} KB{n} MBफ़ाइल पढ़ी जा रही है…वह फ़ाइल पढ़ी नहीं जा सकी: {reason}अभी कुछ नहीं।कुछ निकला ही नहीं।{name} — {lines} पंक्तियाँ, {size}कॉपीकॉपी हो गयाचुन लिया — Ctrl+C दबाइएआपका टेक्स्ट कहीं नहीं गया। {total} फ़ाइलें लोड हुईं। {platform}किसी चीज़ ने {hosts} से संपर्क किया, और यह टूल ऐसा कभी नहीं करता। {platform}विज्ञापन, माप और दान वाले बटन के लिए साइट की अपनी स्क्रिप्ट {hosts} होस्ट से आईं। उनमें से किसी को उसका एक अक्षर भी नहीं मिला।विज्ञापन, माप और दान वाले बटन के लिए साइट की अपनी स्क्रिप्ट {hosts} होस्ट से आईं। उनमें से किसी को उसका एक अक्षर भी नहीं मिला।
क्या इससे काम बन गया?
क्या गड़बड़ हुई?
शुक्रिया — इससे मदद मिलती है।
सिर्फ़ आपका जवाब भेजा जाता है, वह भी तभी जब आप बटन दबाते हैं। आपकी फ़ाइल, उसका नाम या उससे जुड़ी कोई बात कभी नहीं।
# YAML से JSON — और JSON से वापस YAML
दोनों दिशाएँ, और हर दिशा की कीमत भी बताई जाती है। इनमें से कुछ भी किसी और के सर्वर में पेस्ट नहीं होता।
> अपने ब्राउज़र में YAML को JSON और JSON को YAML में बदलिए। यह YAML 1.2 पढ़ता है, इसलिए yes और no स्ट्रिंग ही रहते हैं, और बताता है कि हर दिशा में क्या खोता है। कुछ भी अपलोड नहीं होता, इसलिए कोई कॉन्फ़िग फ़ाइल आपकी डिवाइस से बाहर नहीं जाती।
यह पेज एक इंटरैक्टिव टूल है जो पूरी तरह आपके ब्राउज़र में चलता है, https://abox.tools/hi/yaml-to-json/ पर — आप इसे जो भी देते हैं, वह कहीं अपलोड नहीं होता। आगे वह सब कुछ है जो यह पेज इस टूल के बारे में शब्दों में कहता है; इसे इस्तेमाल करने के लिए यह पता खोलें।
## यह टूल YAML और JSON फ़ाइलें **कभी अपलोड नहीं करता**। यहाँ कोई सर्वर है ही नहीं।
बदलना एक स्ट्रिंग पर की गई गणित है, और वह यहीं, इसी पेज पर होती है। दोनों पार्सर हाथ से लिखे हुए हैं और `src/` में हैं — `shared/parse-yaml.js` और `shared/parse-json.js` — इसके अलावा कुछ नहीं। इस टूल में किसी भी तरह की नेटवर्क सुविधा है ही नहीं — न कुछ लाने को, न कुछ भेजने को — और यहाँ इसका वज़न इस साइट की लगभग हर दूसरी जगह से ज़्यादा है: एक YAML फ़ाइल आम तौर पर डिप्लॉयमेंट कॉन्फ़िग होती है, और डिप्लॉयमेंट कॉन्फ़िग आम तौर पर होस्टनेम, बकेट नाम और सीक्रेट से भरी होती है।
- ✗ कोई अपलोड नहीं
- ✗ कोई खाता नहीं
- ✗ साइज़ की कोई सीमा नहीं
- ✓ ऑफ़लाइन चलता है
- ✓ ओपन सोर्स
## YAML को अपलोड किए बिना JSON में कैसे बदलें
1. **दिशा चुनिए।** *YAML से JSON* या *JSON से YAML*। मेन्यू के नीचे लिखी बात बताती है कि उस दिशा में क्या खोता है — आपके कुछ भी पेस्ट करने से पहले, बाद में नहीं।
2. **पेस्ट कीजिए, या फ़ाइल छोड़िए।** जो कुछ आप चुनकर कॉपी कर सकते हैं वह सब चलता है। सिलेक्टर पर छोड़ी गई फ़ाइल को आपका अपना ब्राउज़र पढ़कर बॉक्स में डाल देता है — छोड़ने के लिए अपलोड वाला कोई कदम है ही नहीं — और `.json` या `.yaml` एक्सटेंशन दिशा भी अपने आप तय कर देता है।
3. **इंडेंट चुनिए।** दो स्पेस, चार, या एक टैब। टैब सिर्फ़ JSON के लिए दिया जाता है: YAML स्पेस के हिसाब से तय होता है, और उसमें टैब वैध इंडेंट नहीं है।
4. **गड़बड़ी वहीं पढ़िए जहाँ गड़बड़ी है।** यहाँ नाकाम होने वाला पार्सर “पोज़िशन 4193 पर अनपेक्षित टोकन” कहने के बजाय बताता है कि उसे क्या मिला और किस लाइन तथा किस कॉलम पर। आम तौर पर इतना ही काफ़ी होता है कि कॉन्फ़िग फ़ाइल कुछ और खोले बिना ठीक हो जाए।
5. **नतीजा ले जाइए।** कॉपी कीजिए, या फ़ाइल के रूप में डाउनलोड कीजिए, जिसका नाम उसी फ़ॉर्मैट पर होगा जिसमें वह निकला।
## बॉक्स में और भी टूल
- [XML फ़ॉर्मैटर](https://abox.tools/hi/xml-formatter/): पढ़ने के लिए सजाया गया XML या भेजने के लिए दबाकर सपाट किया गया XML, और दोनों तरफ़ JSON में बदला हुआ। इनमें से कुछ भी किसी और के सर्वर में पेस्ट नहीं होता।
- [टेक्स्ट डिफ़](https://abox.tools/hi/text-diff/): दो टेक्स्ट भीतर, हर फ़र्क निशान लगाकर बाहर, पंक्ति-दर-पंक्ति और शब्द-दर-शब्द। कुछ भी किसी और के सर्वर में चिपकाया नहीं जाता।
- [Base64 एनकोडर-डिकोडर](https://abox.tools/hi/base64/): Base64, परसेंट एनकोडिंग, HTML एंटिटी, हेक्स और बैकस्लैश एस्केप, दोनों दिशाओं में। कुछ भी किसी और के सर्वर में चिपकाया नहीं जाता।
- [टेक्स्ट और फ़ाइलें साझा करें](https://abox.tools/hi/share-text/): साझा की गई चीज़ इसी खुले टैब में रहती है। पाठक उसे एन्क्रिप्टेड रूप में सीधे आपके ब्राउज़र से पाते हैं, और टैब बंद करते ही सब खत्म - किसी सर्वर पर कुछ नहीं रहता।
## सवाल
### क्या मेरा YAML कहीं अपलोड होता है?
नहीं। इस पेज के दोनों पार्सर और दोनों प्रिंटर ऐसे फ़ंक्शन हैं जो आपके अपने ब्राउज़र में, आपके अपने हार्डवेयर पर चलते हैं। इस टूल में किसी भी तरह की नेटवर्क सुविधा नहीं है — यह कभी कुछ मँगाता नहीं और कभी कुछ भेजता नहीं — और पेज की `Content-Security-Policy` में वे सारे पते लिखे हैं जिनसे यह संपर्क कर सकता है, जिनमें से एक भी हमारा नहीं है। डिप्लॉयमेंट कॉन्फ़िग के लिए इसे इस्तेमाल करने की वजह भी यही है: उनमें होस्टनेम, बकेट नाम और कभी-कभी कोई सीक्रेट भरा होता है जिसे कोई हटाना चाहता था, और उसे किसी और के कन्वर्टर में पेस्ट करना उसे दे देना है।
### YAML को JSON में बदलने पर क्या खोता है?
टिप्पणियाँ, क्योंकि JSON के पास उन्हें रखने की जगह नहीं है। ऐंकर, एलियस और टैग अंदाज़े के बजाय सीधे मना कर दिए जाते हैं — इनमें से हर एक ऐसा कुछ कहता है जो JSON कह ही नहीं सकता, और जो कन्वर्टर चुपचाप कोई व्याख्या चुन लेता, वह आपको ऐसा दस्तावेज़ थमा देता जो फ़ाइल की बात नहीं है। दूसरी दिशा कुछ नहीं खोती: हर JSON दस्तावेज़ पहले से ही एक YAML दस्तावेज़ है।
### मेरे YAML में no लिखा है और JSON में स्ट्रिंग आई। क्यों?
क्योंकि वह स्ट्रिंग ही है, और यहाँ 1.1 नहीं बल्कि YAML 1.2 पढ़ा जाता है। YAML 1.1 में `yes`, `no`, `on` और `off` बूलियन थे, और यही वह मशहूर गड़बड़ी है जो नॉर्वे के देश कोड को `false` बना देती है। YAML 1.2 ने इसे छोड़ दिया और यह भी: टेक्स्ट के अलावा कुछ और सिर्फ़ `true`, `false`, `null` और `~` पढ़े जाते हैं। दूसरी दिशा में वे शब्द *उद्धरण चिह्नों के साथ* वापस लिखे जाते हैं, हालाँकि यहाँ बिना उनके भी वे टेक्स्ट ही पढ़े जाते — क्योंकि फ़ाइल को आगे जो खोलेगा वह शायद ऐसा न करे। PyYAML आज भी डिफ़ॉल्ट रूप से 1.1 ही इस्तेमाल करता है। सख्ती से पढ़ना और सँभलकर लिखना ही वह इकलौता मेल है जो दोनों तरफ़ सही रहता है।
### क्या यह मेरी कुंजियों का क्रम बनाए रखता है?
हाँ, दोनों दिशाओं में, और यह सुनने में जितना लगता है उससे कठिन है। `JSON.parse` पर बना कोई कन्वर्टर पूर्णांक जैसी दिखने वाली कुंजियों को चुपचाप आगे खिसका देता है, तो `{"10":a,"2":b}` वापस `{"2":b,"10":a}` बनकर आता है। संख्याएँ वही अंक रखती हैं जो आपने टाइप किए, इसलिए बीस अंकों वाला कोई खाता नंबर अपने आखिरी तीन अंक डबल की वजह से नहीं खोता। अगर आप उन्हें *क्रम में* चाहते हैं तो एक चेकबॉक्स है, और वह कुंजियाँ जैसी पढ़ी जाती हैं उस हिसाब से क्रम लगाता है, न कि उनके कोड पॉइंट से।
### क्या यह एक साथ कई YAML दस्तावेज़ बदल सकता है?
नहीं, और यह कोई एक चुनने के बजाय ऐसा कह देता है। `---` से अलग की गई फ़ाइल में एक से ज़्यादा दस्तावेज़ होते हैं, और JSON में ऐसी कोई शक्ल नहीं है जिसका मतलब “कई दस्तावेज़” हो — ऐरे बनाना ऐसा दावा होता जो फ़ाइल ने कभी किया ही नहीं। इन्हें एक-एक करके बदलिए।
### यहाँ YAML फ़ॉर्मैटर क्यों नहीं है?
क्योंकि YAML की कोई दबी हुई शक्ल ऐसी नहीं जिसे लिखना सार्थक हो — छोटी शक्ल फ़्लो स्टाइल है, जो पढ़ी नहीं जाती, और न पढ़ा जाना उस वजह के ठीक उलट है जिसके लिए फ़ाइल YAML में रखी जाती है। JSON, XML, HTML और CSS सजाना [JSON फ़ॉर्मैटर](https://abox.tools/hi/json-formatter/) का काम है, और वह YAML भी सजाता है।
### फ़ाइल कितनी बड़ी हो सकती है?
यहाँ कोई सीमा रखी ही नहीं गई, क्योंकि उसके लिए पैसे देने वाला कोई सर्वर नहीं है। असली छत आपकी अपनी डिवाइस है: कुछ मेगाबाइट YAML ठीक रहता है, और बहुत लंबे दस्तावेज़ में पेज आपसे कीबोर्ड छीनने के बजाय आपके टाइप करने में ठहराव का इंतज़ार करता है और फिर बदलता है।
### क्या यह मुफ़्त है, और क्या खाता चाहिए?
यह मुफ़्त है, और कोई खाता नहीं, कोई साइन-इन नहीं, कोई ट्रायल नहीं और आप कितना पेस्ट करें इसकी कोई सीमा नहीं। साइट पर विज्ञापन हैं, उन्हीं से इसका खर्च चलता है; विज्ञापनों को आपके टेक्स्ट के बारे में कुछ नहीं दिया जाता।
### क्या यह ऑफ़लाइन चलता है?
हाँ। पेज एक बार लोड कीजिए, फिर इंटरनेट काट दीजिए और यह चलता रहता है। यही सबसे आसान तरीका भी है यह साबित करने का कि कुछ अपलोड नहीं हो रहा: जो टूल आपकी कॉन्फ़िग बदलने के लिए बाहर भेजता, वह तार निकालते ही रुक जाता।
## प्राइवेसी का यह दावा कैसे जाँचा जा सकता है
- **आप जो पेस्ट करते हैं उसके जाने की कोई जगह नहीं है।** Content-Security-Policy में वे सारे पते लिखे हैं जिनसे यह पेज संपर्क कर सकता है, और उनमें से एक भी हमारा नहीं है। यहाँ ऐसा कोई एंडपॉइंट नहीं है जहाँ पेस्ट की गई कॉन्फ़िग इकट्ठी की जा सके, और होता भी तो कोड में ऐसा कुछ नहीं है जो उसे वहाँ भेजे।
- **यहाँ कुछ भी कहीं से कुछ नहीं लाता।** पूरे `src/` में कहीं कोई `fetch`, कोई `XMLHttpRequest` और कोई `sendBeacon` नहीं है। दोनों पार्सर और दोनों प्रिंटर इसी पेज के फ़ंक्शन हैं जो एक स्ट्रिंग लेते हैं और एक स्ट्रिंग लौटाते हैं।
- **यह YAML 1.2 पढ़ता है, इसलिए नॉर्वे नॉर्वे ही रहता है।** YAML 1.1 में `no` एक बूलियन था, और यही वह मशहूर गड़बड़ी है जो नॉर्वे के देश कोड को `false` बना देती है। यहाँ 1.2 पढ़ा जाता है, जहाँ वह वही स्ट्रिंग है जैसा दिखता है। दूसरी दिशा में वे शब्द *उद्धरण चिह्नों के साथ* वापस लिखे जाते हैं, क्योंकि फ़ाइल को आगे जो खोलेगा वह अब भी 1.1 का रीडर हो सकता है। `tests/js/text-convert.test.js` दोनों हिस्से जाँचता है।
- **जो कन्वर्ज़न ईमानदार नहीं रह सकता, वह रुक जाता है।** YAML में कोई ऐंकर, एलियस या टैग कन्वर्ज़न को इस संदेश के साथ खत्म कर देता है कि वह किस लाइन पर है, बजाय ऐसा JSON दस्तावेज़ देने के जो चुपचाप कुछ और मतलब रखता हो। JSON के पास “वही नोड दो बार” कहने का कोई तरीका नहीं है, और कोई एक व्याख्या चुनना आपके लिए फ़ैसला करना होगा।
- **गूगल क्या लोड करता है, और उसे क्या नहीं दिया जाता।** विज्ञापन और माप वाली स्क्रिप्ट गूगल से आती हैं, और दान वाला बटन Buy Me a Coffee से। इनमें से किसी को भी आपके टेक्स्ट का एक अक्षर नहीं दिया जाता। जो भी लाइन उसे पढ़ती, पार्स करती या लिखती है, वह इसी ओरिजिन से आती है और रिपॉज़िटरी में दर्ज है।
- **यह ऑफ़लाइन चलता है।** नेटवर्क काट दीजिए और टूल जस का तस रहता है, क्योंकि इसमें कभी नेटवर्क वाला कदम था ही नहीं। इससे आसान सबूत कोई नहीं।
**खुद जाँच लीजिए।** ऊपर लिखी किसी भी बात को भरोसे पर मानने की ज़रूरत नहीं। यह पेज रिपॉज़िटरी के टेम्पलेट और कॉन्फ़िग से बनता है, एक ऐसी बिल्ड स्क्रिप्ट के ज़रिए जिसे आप पढ़ भी सकते हैं और खुद चला भी सकते हैं। उसका नतीजा `dist` ब्रांच पर कमिट रहता है, यानी जो सर्व हो रहा है और सोर्स से बिल्ड करने पर जो बनता है, दोनों का फ़र्क आप खुद देख सकते हैं: https://github.com/A-Box-of-Tools/website
सबसे पहले पढ़ने लायक फ़ाइलें ये हैं — Content-Security-Policy के लिए `config/site.toml`, उस रीडर के लिए `src/shared/parse-yaml.js` जो किसी ऐंकर का मतलब अंदाज़ने के बजाय उसे मना कर देता है, और `src/convert.js` यह समझने के लिए कि एक कन्वर्ज़न सिर्फ़ एक पार्सर और एक प्रिंटर क्यों है, जिनके बीच ऐसा कुछ नहीं जो दोनों फ़ॉर्मैट एक साथ जानता हो।
YAML को अपलोड किए बिना JSON में कैसे बदलें
दिशा चुनिए।YAML से JSON या JSON से YAML। मेन्यू के नीचे लिखी बात बताती है कि उस दिशा में क्या खोता है — आपके कुछ भी पेस्ट करने से पहले, बाद में नहीं।
पेस्ट कीजिए, या फ़ाइल छोड़िए। जो कुछ आप चुनकर कॉपी कर सकते हैं वह सब चलता है। सिलेक्टर पर छोड़ी गई फ़ाइल को आपका अपना ब्राउज़र पढ़कर बॉक्स में डाल देता है — छोड़ने के लिए अपलोड वाला कोई कदम है ही नहीं — और .json या .yaml एक्सटेंशन दिशा भी अपने आप तय कर देता है।
इंडेंट चुनिए। दो स्पेस, चार, या एक टैब। टैब सिर्फ़ JSON के लिए दिया जाता है: YAML स्पेस के हिसाब से तय होता है, और उसमें टैब वैध इंडेंट नहीं है।
गड़बड़ी वहीं पढ़िए जहाँ गड़बड़ी है। यहाँ नाकाम होने वाला पार्सर “पोज़िशन 4193 पर अनपेक्षित टोकन” कहने के बजाय बताता है कि उसे क्या मिला और किस लाइन तथा किस कॉलम पर। आम तौर पर इतना ही काफ़ी होता है कि कॉन्फ़िग फ़ाइल कुछ और खोले बिना ठीक हो जाए।
नतीजा ले जाइए। कॉपी कीजिए, या फ़ाइल के रूप में डाउनलोड कीजिए, जिसका नाम उसी फ़ॉर्मैट पर होगा जिसमें वह निकला।
नहीं। इस पेज के दोनों पार्सर और दोनों प्रिंटर ऐसे फ़ंक्शन हैं जो आपके अपने ब्राउज़र में, आपके अपने हार्डवेयर पर चलते हैं। इस टूल में किसी भी तरह की नेटवर्क सुविधा नहीं है — यह कभी कुछ मँगाता नहीं और कभी कुछ भेजता नहीं — और पेज की Content-Security-Policy में वे सारे पते लिखे हैं जिनसे यह संपर्क कर सकता है, जिनमें से एक भी हमारा नहीं है। डिप्लॉयमेंट कॉन्फ़िग के लिए इसे इस्तेमाल करने की वजह भी यही है: उनमें होस्टनेम, बकेट नाम और कभी-कभी कोई सीक्रेट भरा होता है जिसे कोई हटाना चाहता था, और उसे किसी और के कन्वर्टर में पेस्ट करना उसे दे देना है।
YAML को JSON में बदलने पर क्या खोता है?
टिप्पणियाँ, क्योंकि JSON के पास उन्हें रखने की जगह नहीं है। ऐंकर, एलियस और टैग अंदाज़े के बजाय सीधे मना कर दिए जाते हैं — इनमें से हर एक ऐसा कुछ कहता है जो JSON कह ही नहीं सकता, और जो कन्वर्टर चुपचाप कोई व्याख्या चुन लेता, वह आपको ऐसा दस्तावेज़ थमा देता जो फ़ाइल की बात नहीं है। दूसरी दिशा कुछ नहीं खोती: हर JSON दस्तावेज़ पहले से ही एक YAML दस्तावेज़ है।
मेरे YAML में no लिखा है और JSON में स्ट्रिंग आई। क्यों?
क्योंकि वह स्ट्रिंग ही है, और यहाँ 1.1 नहीं बल्कि YAML 1.2 पढ़ा जाता है। YAML 1.1 में yes, no, on और off बूलियन थे, और यही वह मशहूर गड़बड़ी है जो नॉर्वे के देश कोड को false बना देती है। YAML 1.2 ने इसे छोड़ दिया और यह भी: टेक्स्ट के अलावा कुछ और सिर्फ़ true, false, null और ~ पढ़े जाते हैं। दूसरी दिशा में वे शब्द उद्धरण चिह्नों के साथ वापस लिखे जाते हैं, हालाँकि यहाँ बिना उनके भी वे टेक्स्ट ही पढ़े जाते — क्योंकि फ़ाइल को आगे जो खोलेगा वह शायद ऐसा न करे। PyYAML आज भी डिफ़ॉल्ट रूप से 1.1 ही इस्तेमाल करता है। सख्ती से पढ़ना और सँभलकर लिखना ही वह इकलौता मेल है जो दोनों तरफ़ सही रहता है।
क्या यह मेरी कुंजियों का क्रम बनाए रखता है?
हाँ, दोनों दिशाओं में, और यह सुनने में जितना लगता है उससे कठिन है। JSON.parse पर बना कोई कन्वर्टर पूर्णांक जैसी दिखने वाली कुंजियों को चुपचाप आगे खिसका देता है, तो {"10":a,"2":b} वापस {"2":b,"10":a} बनकर आता है। संख्याएँ वही अंक रखती हैं जो आपने टाइप किए, इसलिए बीस अंकों वाला कोई खाता नंबर अपने आखिरी तीन अंक डबल की वजह से नहीं खोता। अगर आप उन्हें क्रम में चाहते हैं तो एक चेकबॉक्स है, और वह कुंजियाँ जैसी पढ़ी जाती हैं उस हिसाब से क्रम लगाता है, न कि उनके कोड पॉइंट से।
क्या यह एक साथ कई YAML दस्तावेज़ बदल सकता है?
नहीं, और यह कोई एक चुनने के बजाय ऐसा कह देता है। --- से अलग की गई फ़ाइल में एक से ज़्यादा दस्तावेज़ होते हैं, और JSON में ऐसी कोई शक्ल नहीं है जिसका मतलब “कई दस्तावेज़” हो — ऐरे बनाना ऐसा दावा होता जो फ़ाइल ने कभी किया ही नहीं। इन्हें एक-एक करके बदलिए।
यहाँ YAML फ़ॉर्मैटर क्यों नहीं है?
क्योंकि YAML की कोई दबी हुई शक्ल ऐसी नहीं जिसे लिखना सार्थक हो — छोटी शक्ल फ़्लो स्टाइल है, जो पढ़ी नहीं जाती, और न पढ़ा जाना उस वजह के ठीक उलट है जिसके लिए फ़ाइल YAML में रखी जाती है। JSON, XML, HTML और CSS सजाना JSON फ़ॉर्मैटर का काम है, और वह YAML भी सजाता है।
फ़ाइल कितनी बड़ी हो सकती है?
यहाँ कोई सीमा रखी ही नहीं गई, क्योंकि उसके लिए पैसे देने वाला कोई सर्वर नहीं है। असली छत आपकी अपनी डिवाइस है: कुछ मेगाबाइट YAML ठीक रहता है, और बहुत लंबे दस्तावेज़ में पेज आपसे कीबोर्ड छीनने के बजाय आपके टाइप करने में ठहराव का इंतज़ार करता है और फिर बदलता है।
क्या यह मुफ़्त है, और क्या खाता चाहिए?
यह मुफ़्त है, और कोई खाता नहीं, कोई साइन-इन नहीं, कोई ट्रायल नहीं और आप कितना पेस्ट करें इसकी कोई सीमा नहीं। साइट पर विज्ञापन हैं, उन्हीं से इसका खर्च चलता है; विज्ञापनों को आपके टेक्स्ट के बारे में कुछ नहीं दिया जाता।
क्या यह ऑफ़लाइन चलता है?
हाँ। पेज एक बार लोड कीजिए, फिर इंटरनेट काट दीजिए और यह चलता रहता है। यही सबसे आसान तरीका भी है यह साबित करने का कि कुछ अपलोड नहीं हो रहा: जो टूल आपकी कॉन्फ़िग बदलने के लिए बाहर भेजता, वह तार निकालते ही रुक जाता।