इस साइट का हर टूल आपके ब्राउज़र में चलता है। यहां कोई अपलोड नहीं होता, कोई खाता नहीं बनता, और कोई सर्वर आपका JSON नहीं देखता। यह पोस्ट बताती है कि यह होता कैसे है, आप खुद इसे कैसे जांच सकते हैं, और टूल जानबूझकर क्या नहीं करते।
पेस्ट करने पर होता क्या है
टूल का पेज खोलते ही आपका ब्राउज़र एक HTML दस्तावेज़ और एक छोटी JavaScript फ़ाइल डाउनलोड करता है। पूरा टूल बस इतना ही है। जब आप दस्तावेज़ पेस्ट करके बटन दबाते हैं, तो पार्सिंग और छपाई उसी टैब के भीतर होती है और नतीजा वापस पेज में लिख दिया जाता है। कुछ भी कहीं नहीं भेजा जाता, क्योंकि भेजने की जगह ही नहीं है: टूल के डेटा के लिए इस साइट का कोई सर्वर है ही नहीं।
इसका मतलब यह भी है कि कुछ सहेजा नहीं जाता। टैब बंद कीजिए और दस्तावेज़ चला गया। न मिटाने को इतिहास है, न हटाने को खाता। साइट आपके ब्राउज़र में दो छोटी चीज़ें याद रखती है, आपकी थीम पसंद और कुकी सूचना पर आपका उत्तर, और दोनों आपके डिवाइस पर ही रहती हैं।
आधे मिनट में खुद जांचिए
जिस दावे को आप परख न सकें, वह सिर्फ़ एक वाक्य है। इसे परखने में तीस सेकंड लगते हैं:
- कोई भी टूल खोलिए, जैसे फॉर्मैटर।
- ब्राउज़र के डेवलपर टूल खोलिए और नेटवर्क टैब पर जाइए।
- सूची साफ़ कीजिए, कुछ JSON पेस्ट कीजिए और फॉर्मैट दबाइए।
सूची में कुछ नया नहीं आता, क्योंकि कोई अनुरोध भेजा ही नहीं जाता। इसकी तुलना उस टूल से कीजिए जो बटन दबाते ही आपका डेटा सर्वर पर भेजता है, वह उसी पैनल में तुरंत दिख जाएगा।
एक अपवाद जानबूझकर है और वह दूसरे पेज पर है: संपर्क फ़ॉर्म वही भेजता है जो आप उसमें लिखते हैं, क्योंकि ब्राउज़र में ही रह जाने वाला संदेश संदेश नहीं होता।
यह प्रोजेक्ट इसे अपने आप भी परखता है। एंड टू एंड परीक्षण हर टूल में एक अनोखा मार्कर पेस्ट करते हैं, टूल चलाते हैं, और अगर वह मार्कर किसी अनुरोध में दिखे तो बिल्ड फेल कर देते हैं। यह जांच हर बिल्ड पर चलती है, इसलिए अगली बार कोई नई सुविधा जोड़े तो यह वादा चुपचाप टूट नहीं सकता।
टूल पार्स करने के बजाय टोकन क्यों पढ़ते हैं
ज़्यादातर ऑनलाइन फॉर्मैटर भीतर से कुछ ऐसा करते हैं:
JSON.stringify(JSON.parse(input), null, 2)
यह निर्दोष दिखता है और दो तरीकों से डेटा बिगाड़ता है।
लंबे पूर्णांक अपनी सटीकता खो देते हैं। JavaScript की संख्याएं डबल होती हैं,
इसलिए लगभग सोलह अंकों से बड़ा पूर्णांक ठीक-ठीक नहीं समाता। ऐसे बने फॉर्मैटर में
{"id": 12345678901234567890} पेस्ट कीजिए और वापस मिलेगा
12345678901234567000। बिना किसी चेतावनी के।
संख्या जैसी दिखने वाली कीज़ का क्रम बदल जाता है। JavaScript ऑब्जेक्ट पूर्णांक
जैसी कीज़ को संख्या क्रम में और बाकी सबसे पहले रखते हैं। इसलिए
{"2": "silver", "1": "gold"} वापस {"1": "gold", "2": "silver"} बनकर आता है,
और कॉन्फ़िग फ़ाइल में यह क्रम अक्सर मायने रखता है।
यहां के टूल आपके दस्तावेज़ से कभी JavaScript वैल्यू नहीं बनाते। वे उसे टोकन में बांटते हैं, हर टोकन का असली टेक्स्ट संभालकर रखते हैं, और उसी धारा को अलग स्पेसिंग के साथ दोबारा छापते हैं। आपका दस्तावेज़ अक्षर दर अक्षर वैसा ही लौटता है, फ़र्क़ सिर्फ़ खाली जगह का होता है। दोनों मामलों को यूनिट परीक्षण बांधे रखते हैं, ताकि आगे कोई बदलाव उन्हें दोबारा न ले आए।
यह साइट क्या नहीं करती
कुछ मानक यहां आंशिक रूप से ही लागू हैं। JSONPath टेस्टर उन्हीं सिलेक्टर को समर्थन देता है जो असल क्वेरी में काम आते हैं, और उनकी सूची पेज पर ही दी गई है। फ़ंक्शन एक्सटेंशन और RFC 9535 के कुछ कोने इसमें नहीं हैं, और उन्हें उपयोग करने पर उस सुविधा का नाम लेकर संदेश मिलता है, कोई अस्पष्ट गड़बड़ी नहीं। JSON Pointer का मामला उल्टा है: RFC 6901 चार पन्नों की है, इसलिए वह पूरी लागू है।
रिपेयर आपका डेटा बदल सकता है। NaN, Infinity और undefined का JSON में कोई
रूप नहीं है, इसलिए रिपेयर टूल उन्हें null बना देता है और उन
बदलावों को विराम चिह्न वाले बदलावों से अलग सूचीबद्ध करता है। नतीजे पर भरोसा करने
के बजाय वह सूची पढ़िए।
बहुत बड़े दस्तावेज़ जानबूझकर सीमित होते हैं। लगभग दो लाख अक्षरों के बाद सिंटैक्स रंग बंद हो जाता है ताकि टाइपिंग सहज रहे, और पेज उस समय यह बता देता है। व्यूअर हर शाखा तभी बनाता है जब आप उसे खोलते हैं, और कुछ हज़ार वैल्यू के बाद वह सब कुछ एक साथ खोलने से मना कर देता है, बजाय इसके कि टैब एक मिनट के लिए अटक जाए।
शुरुआत कहां से करें
अगर आपके पास टूटा हुआ दस्तावेज़ है, तो वैलिडेटर बताएगा कि क्या गलत है और रिपेयर यांत्रिक हिस्सा ठीक कर देगा। अगर दस्तावेज़ चलता तो है पर समझ नहीं आता, तो व्यूअर सबसे तेज़ रास्ता है। बाकी सब टूल पेज पर है।