आँकड़ों और विज्ञापन के लिए कुकीज़
हम आँकड़ों और विज्ञापन के लिए कुकीज़ इस्तेमाल करते हैं, दोनों Google को जाती हैं। मना करने से आपको दिखने वाली किसी चीज़ में कोई फ़र्क़ नहीं पड़ता।निजता पेज पढ़ें
यहाँ आप NDJSON को JSON में बदलते हैं, मुफ़्त और बिना खाते के: फ़ाइल ऊपर छोड़िए और कुछ ही सेकंड में नतीजा डाउनलोड के लिए तैयार मिलेगा। कन्वर्ज़न आपके अपने ब्राउज़र के भीतर होता है, इसलिए फ़ाइल कभी अपलोड नहीं होती। यह Windows, macOS और Linux पर वैसे ही चलता है जैसे iPhone और Android पर, और कनेक्शन काट देने पर भी चलता रहता है।
एक बार में 100 फ़ाइलें। फ़ॉर्मेट अलग-अलग हों तो भी चलेगा।
ये एक के बाद एक बदलती हैं और साथ में एक ZIP बनकर उतरती हैं।
NDJSON से JSON
एक JSON दस्तावेज़ एक ही वैल्यू होता है। NDJSON फ़ाइल उनकी एक शृंखला है, बीच में newline लिए — कोई भी नेकनीयती इसे दस्तावेज़ नहीं बना सकती। पार्सर पहला ऑब्जेक्ट पढ़ता है, दूसरे की खुलती ब्रेस पर पहुँचता है, और अनपेक्षित-टोकन त्रुटि पर रुक जाता है।
नतीजा आम जगहों पर दिखता है। कोई JSON Schema validator फ़ाइल को मना कर देता है। response.json() ब्राउज़र में फेल हो जाता है। इसका इलाज हमेशा वही एक पंक्ति की संरचना है: पूरी चीज़ के चारों ओर ब्रैकेट, और रिकॉर्ड के बीच कॉमा।
हर लाइन शीर्ष-स्तर के ऐरे का एक तत्व बन जाती है, फ़ाइल के क्रम में — यहाँ तक कि स्रोत में सिर्फ़ एक लाइन होने पर भी, तब भी एक तत्व वाला ऐरे बनता है, बिना-रैप की गई ऑब्जेक्ट नहीं। आउटपुट दो-स्पेस इंडेंट किया जाता है और newline पर ख़त्म होता है।
शेप का पहले से पता होना काम आता है: स्क्रिप्ट बिना जाँचे नतीजे में इंडेक्स लगा सकती है, और ऐरे की लंबाई स्रोत की ग़ैर-ख़ाली लाइनों की गिनती के बराबर होती है।
ज़्यादातर API नंगा ऐरे नहीं लेते। वे नाम के नीचे रिकॉर्ड लेते हैं — {"records": […]}, {"data": […]} — और अक्सर साथ में गिनती भी। यह बदलाव ऐरे बनाकर वहीं रुक जाता है, क्योंकि कोई नाम गढ़ना एक ऐसे अनुबंध को अंदाज़े से मान लेना होगा जो इसे दिखता ही नहीं।
बाद में जोड़ना आसान है: jq '{records: .}' out.json लपेट देता है। भेजने से पहले API के दस्तावेज़ में फ़ील्ड का नाम जाँच लीजिए, क्योंकि ठुकराया गया बैच अक्सर सिर्फ़ यह बताता है कि बॉडी अमान्य थी।
यह NDJSON से बाहर निकलने की सुरक्षित दिशा है, और इसे साफ़ कहना ज़रूरी है क्योंकि पड़ोसी लक्ष्य ऐसे नहीं हैं। वही फ़ाइल CSV, TSV, XLSX या Parquet भेजने पर हर नेस्टेड ऑब्जेक्ट डॉट वाले कॉलम में चपटा हो जाता है। यहाँ ऐसा कुछ नहीं होता — तीन स्तर गहरी user ऑब्जेक्ट उतनी ही गहरी बनी रहती है।
टाइप भी इसी वजह से बचते हैं। नंबर नंबर रहता है, true बूलियन रहता है, null null रहता है। कुछ भी अनुमान से तय नहीं होता, क्योंकि ज़रूरत ही नहीं — स्रोत पहले से JSON था और लक्ष्य भी JSON है। हर रिकॉर्ड के भीतर की-ऑर्डर भी बनी रहती है।
कोई भी लाइन पार्स न हो पाए तो कुछ भी नहीं लिखा जाता। संदेश में लाइन नंबर होता है: «यह फ़ाइल NDJSON के रूप में नहीं पढ़ी जा सकी — लाइन 3 वैध JSON नहीं है।» कोई अधूरा दस्तावेज़ नहीं बनता, कोई रिकॉर्ड चुपचाप नहीं छूटता।
इस लक्ष्य के लिए यह व्यवहार साधारण स्प्रेडशीट से कहीं ज़्यादा मूल्यवान है। बीच में रुकी प्रक्रिया से कटी आख़िरी लाइन — आम कारण — वरना ऐसा दस्तावेज़ बनाती जो पार्स होता, वैलिडेट होता, और अनजान संख्या में रिकॉर्ड ग़ायब रखता।
आउटपुट दो-स्पेस इंडेंट के साथ प्रिटी-प्रिंटेड है, इसलिए स्रोत में एक घनी लाइन वाला रिकॉर्ड अब हर लीफ़ वैल्यू के लिए एक लाइन घेरता है। एक दर्जन फ़ील्ड वाले फ़्लैट रिकॉर्ड की फ़ाइल इसीलिए क़रीब एक दर्जन गुना लाइन में बढ़ जाती है।
इनमें से कोई डेटा नहीं है, और यह ट्रांसफ़र में लगभग शून्य तक दब जाता है। अगर लक्ष्य किसी अपलोड फ़ील्ड की सीमा है, तो jq -c . से कॉम्पैक्ट रूप निकालिए।
इस बदलाव के दोनों हिस्से पूरी-वैल्यू पर काम करते हैं। लाइनें लिखे जाने से पहले पूरी तरह ऐरे में पार्स होती हैं, और ऐरे एक ही पास में सिरियलाइज़ होता है — कुछ भी स्ट्रीम नहीं होता, क्योंकि ऐरे आख़िरी तत्व से पहले «पूरा» नहीं होता।
फ़्री सीमा 100 MB प्रति फ़ाइल है, और व्यावहारिक सीमा टैब की है। दसियों मेगाबाइट सामान्य है; कई सौ मेगाबाइट के रिकॉर्ड पर ब्राउज़र मेहनत करने लगता है — split -l 200000 से बँटी फ़ाइलें साफ़ बदलती हैं।
नतीजे को उलटी दिशा में बदलने पर वही मिलता है जिससे शुरुआत हुई थी। शीर्ष-स्तर का JSON ऐरे प्रति तत्व एक लाइन के रूप में लिखा जाता है, इसलिए रिकॉर्ड, उनकी की और उनका क्रम सब बिना बदले लौटते हैं।
यह इसे एक स्थायी माइग्रेशन के बजाय एक काम-चलाऊ क़दम बनाता है: JSON में बदलें, वैलिडेटर चलाएँ, किसी असली JSON एडिटर में सुधारें, वापस बदलें, और सुधरी हुई स्ट्रीम उस लोडर को दें जो लाइनें ही चाहता था।
यह बदलाव पेज के भीतर सादी JavaScript है। कोई इंजन नहीं उतारा जाता, कोई अनुरोध फ़ाइल नहीं ले जाता, न कोई खाता है न रोज़ की कोई सीमा। नेटवर्क टैब इसकी जाँच है, न कि यह वाक्य।
यह इसलिए मायने रखता है क्योंकि इस बदलाव की ज़रूरत वाली फ़ाइलें शायद ही कभी सार्वजनिक होती हैं — किसी ईवेंट एक्सपोर्ट, ऑडिट लॉग या ग्राहक एक्सट्रैक्ट को किसी वेब सेवा में पेस्ट करना अक्सर संस्था की नीति के ख़िलाफ़ होता है, और यहाँ भेजने को कुछ है ही नहीं।
| NDJSON | JSON | |
|---|---|---|
| पूरा नाम | Newline-Delimited JSON | JavaScript Object Notation |
| फ़ाइल एक्सटेंशन | .ndjson, .jsonl | .json |
| मीडिया टाइप | application/x-ndjson | application/json |
| पहली बार प्रकाशित | 2013 | 2001 |
| विनिर्देश | — | RFC 8259 |
| लाइसेंस | खुला मानक | खुला मानक |
| आज की स्थिति | मौजूदा | मौजूदा |
| ब्राउज़र में खुलता है | कोई ब्राउज़र नहीं | हर ब्राउज़र |
| इसकी जगह विचारणीय | CSV | XML, YAML |
कुछ नहीं खोता। NDJSON और JSON — दोनों अपनी सामग्री बिना नुक़सान सँभालते हैं: यह कन्वर्ज़न पैकिंग बदलता है, गुणवत्ता नहीं, और आप इसे दोहरा सकते हैं बिना इस डर के कि नुक़सान जमा होता जाएगा।
JSON को हर मौजूदा ब्राउज़र खोल लेता है। NDJSON को इतने भी नहीं। अगर फ़ाइल किसी वेब पेज या किसी फ़ॉर्म तक जा रही है, तो आम तौर पर इस कन्वर्ज़न की पूरी वजह यही है।
jq NDJSON और JSON — दोनों पढ़ लेता है, इसलिए आप नतीजे को असली फ़ाइल के बग़ल में रखकर देख सकते हैं, बिना दूसरा प्रोग्राम खोले।
JSON 2001 से चला आ रहा है, और RFC 8259 में तय किया गया है। Visual Studio Code, jq और Postman इस फ़ॉर्मेट को पढ़ लेते है।
नहीं। यह कन्वर्ज़न पूरी तरह आपके ब्राउज़र में होता है, इसलिए फ़ाइल आपके डिवाइस से बाहर नहीं जाती। आप ख़ुद जाँच सकते हैं: डेवलपर टूल्स का नेटवर्क टैब खोलिए और कुछ बदल कर देखिए। आपको पेज ख़ुद दिखेगा और आँकड़ों तथा विज्ञापन के वे अनुरोध दिखेंगे जिनसे इस सेवा का ख़र्च निकलता है — और एक भी ऐसा अनुरोध नहीं जो आपकी फ़ाइल साथ ले जा रहा हो।
हाँ। न खाता, न वॉटरमार्क, और न कोई रोज़ का कोटा जो ख़त्म हो: यह आपकी अपनी मशीन पर चलता है, इसलिए आप जितनी बार चाहें लौट सकते हैं। ब्राउज़र 100 MB तक की फ़ाइलें सँभालता है, एक बार में 100।
नहीं। JSON वही सामग्री बिना कुछ फेंके सँभालता है: नतीजा गुणवत्ता में असली फ़ाइल जैसा ही होता है।
कुछ नहीं खोता। NDJSON और JSON — दोनों अपनी सामग्री बिना नुक़सान सँभालते हैं: यह कन्वर्ज़न पैकिंग बदलता है, गुणवत्ता नहीं, और आप इसे दोहरा सकते हैं बिना इस डर के कि नुक़सान जमा होता जाएगा।