NDJSON

NDJSON फ़ाइल क्या होती है?

हर पंक्ति पर एक JSON वस्तु। लॉग पाइपलाइन और डेटा निर्यात यही देते हैं।

NDJSON है क्या

NDJSON एक सादा टेक्स्ट फ़ॉर्मेट है, जो किसी भी एडिटर में खुल जाता है। इसका इस्तेमाल प्रोग्रामों के बीच डेटा ले जाना और स्ट्रीमिंग के लिए होता है।

एक्सटेंशन .ndjson है और पूरा नाम Newline-Delimited JSON। दोनों उतना नहीं बताते जितना यह कि फ़ाइल अंदर क्या-क्या रख सकती है — और इस पन्ने का बाक़ी हिस्सा इसी के बारे में है।

NDJSON आया कहाँ से

यह 2013 तक पीछे जाता है।

उम्र एक व्यावहारिक वजह से काम की है: फ़ॉर्मेट जितना पुराना, उतने ज़्यादा प्रोग्रामों को उसे सीखने का वक़्त मिला है।

विनिर्देश सार्वजनिक है

यह पूरा प्रकाशित है, इसलिए कोई भी इसे देखकर अंदाज़ा लगाने के बजाय दस्तावेज़ पढ़कर लागू कर सकता है। यही वजह है कि यह फ़ॉर्मेट इतने सारे प्रोग्रामों में मिलता है, और यही वजह है कि बीस साल पहले लिखी गई फ़ाइलें आज भी खुल जाती हैं। पर विनिर्देश का प्रकाशित होना और उसका रॉयल्टी-मुक्त होना एक बात नहीं है: जहाँ फ़ॉर्मेट किसी कोडेक को अपने अंदर लपेटता है, वहाँ पेटेंट का लाइसेंस एक अलग सवाल है, और मानक उसका जवाब नहीं देता।

कुछ भी फेंका नहीं जाता

NDJSON फ़ाइल अपना अंदरूनी हिस्सा हूबहू सहेजती है। दोबारा सहेजने से कुछ नहीं बदलता, इसलिए इसे जितनी बार चाहें खोलिए, बदलिए और फिर से सहेजिए — नुक़सान जमा नहीं होता। यही बात इसे सौंपने का नहीं, काम करने का फ़ॉर्मेट बनाती है।

यह और क्या ले जा सकती है

NDJSON फ़ाइल ऐसी बनावट जिससे पूरा पहुँचने से पहले ही यह चलना शुरू कर सके रख सकती है।

यह ख़ास तौर पर बदलते समय मायने रखता है: लक्ष्य जो नहीं रख सकता वह गिरा दिया जाता है, अमूमन बिना किसी चेतावनी के।

टिप्पणी छोड़ने की कोई जगह नहीं

NDJSON फ़ाइल में टिप्पणी लिखने का कोई तरीक़ा नहीं है। समझाने वाली हर बात फ़ाइल के बाहर रहनी पड़ेगी — इसे ऐसे किसी काम के लिए चुनने से पहले यह जान लेना चाहिए जिसे कोई इंसान हाथ से सँभालेगा।

NDJSON को खोलता कौन है

jq और pandas इसे पढ़ते हैं, और इसी तरह के ज़्यादातर दूसरे प्रोग्राम भी।

फ़ाइल न खुले तो कसूर फ़ॉर्मेट का शायद ही कभी होता है — अक्सर प्रोग्राम ही फ़ॉर्मेट से पुराना होता है। किसी पुरानी चीज़ में बदल लेना इससे निकलने का भरोसेमंद रास्ता है, और इस वेबसाइट का बाक़ी हिस्सा इसी के लिए है।

इसे ब्राउज़र में खोलना

इसे कोई भी ब्राउज़र नहीं पढ़ता।

इसे बदलने की सबसे आम वजह यही है: फ़ॉर्मेट ख़राब है, ऐसा नहीं — बात यह है कि जहाँ आप फ़ाइल दिखाना चाहते हैं वह जगह उसे पढ़ ही नहीं सकती।

यह काम करने का फ़ॉर्मेट है

NDJSON इसलिए बना है कि इसे खोला और बदला जाए। जब तक काम चल रहा है फ़ाइल इसी फ़ॉर्मेट में रखिए, और जब भी बनी हुई प्रति चाहिए हो, इसी से निर्यात कीजिए।

हर लाइन अपना पूरा JSON

NDJSON (Newline Delimited JSON, कभी-कभी JSONL कहा जाता है) एक साधारण-सी बात पर टिका है — फ़ाइल की हर लाइन अपने आप में एक पूरा, वैध JSON मान है। कोई घेरने वाला ऐरे नहीं, कोई कॉमा-अलगाव नहीं, बस एक के बाद एक लाइनें।

यही सादगी इसे लॉग सिस्टम, ईवेंट स्ट्रीम और डेटा-एक्सपोर्ट टूल की पसंदीदा शक्ल बनाती है — इसे लाइन-दर-लाइन पढ़ा और लिखा जा सकता है, बिना पूरी फ़ाइल एक साथ मेमोरी में लाए।

हर लाइन स्वतंत्र होती है

NDJSON की एक लाइन को दूसरी लाइन की संरचना अपनाने की कोई बाध्यता नहीं — एक लाइन में एक तरह के फ़ील्ड हो सकते हैं, अगली में बिलकुल अलग। यह कई तरह के ईवेंट एक ही फ़ाइल में मिलाने के लिए सही है, पर टेबल में बदलते वक़्त इसका असर दिखता है।

अगर किसी NDJSON को CSV जैसे टेबल फ़ॉर्मेट में बदला जाए, तो पूरी फ़ाइल की सभी कुंजियों को मिलाकर एक साझा कॉलम-सूची बनानी पड़ती है।

नेस्टेड बनावट यहाँ बनी रहती है

NDJSON JSON की तरह ही नेस्टेड ऑब्जेक्ट और ऐरे रख सकता है — यह उन फ़ॉर्मेट में है जिन्हें इस साइट का डेटा-पाइपलाइन चपटा नहीं करता। NDJSON से XML, YAML या TOML जैसे दूसरे पेड़-आधारित फ़ॉर्मेट में बदलने पर बनावट बनी रहती है।

सिर्फ़ CSV, TSV, XLSX, SQL और Parquet जैसे सपाट (tabular) फ़ॉर्मेट में बदलते वक़्त नेस्टेड मान डॉट वाले कॉलम-नामों में चपटे होते हैं।

एक टूटी लाइन सिर्फ़ अपनी जगह बताती है

चूँकि हर लाइन अलग से पढ़ी जाती है, कोई एक ख़राब लाइन पूरी फ़ाइल को अपठनीय नहीं बनाती — त्रुटि उसी लाइन की संख्या के साथ आती है, और ख़ाली लाइनें अपने आप छोड़ दी जाती हैं।

यह किसी बड़ी लॉग फ़ाइल में एक ख़राब एंट्री ढूँढ़ना आसान बनाता है, बजाय पूरी फ़ाइल को दोष देने के।

JSON से यह कैसे अलग है

JSON से NDJSON में बदलना एक अलग तरह का काम है — यह किसी ऐरे को उसके एलिमेंट के हिसाब से अलग लाइनों में तोड़ता है, या किसी और ढाँचे को एक ही लाइन में समेटता है। यह डेटा-पाइपलाइन में JSON↔NDJSON को इसीलिए एक अलग नियम माना गया है, बाक़ी tabular बदलावों से अलग।

यह फ़र्क़ इसलिए ज़रूरी है क्योंकि JSON का पूरा दस्तावेज़ एक ही मान है, जबकि NDJSON कई स्वतंत्र मानों की सूची है — दोनों को एक जैसा मानना ग़लत नतीजा देगा।

यह लॉग और स्ट्रीमिंग सिस्टम में क्यों टिका है

बड़ी लॉग फ़ाइल को किसी भी लाइन-सीमा पर सुरक्षित रूप से टुकड़ों में बाँटा जा सकता है, बिना बीच में कोई संरचना तोड़े — यह गुण किसी बड़े JSON ऐरे में नहीं होता, जिसे पूरा पढ़े बिना बाँटना मुश्किल है।

यही वजह है कि Elasticsearch जैसे टूल, BigQuery के एक्सपोर्ट और कई API इसे तयशुदा एक्सपोर्ट फ़ॉर्मेट की तरह इस्तेमाल करते हैं।

बदलना ब्राउज़र में ही चलता है

इस साइट पर NDJSON से जुड़ा हर बदलाव ब्राउज़र में चलता है — फ़ाइल कहीं अपलोड नहीं होती। यह उन लॉग फ़ाइलों के लिए ख़ासकर मायने रखता है जिनमें IP पते, सेशन पहचान या रिक्वेस्ट पाथ जैसी जानकारी हो सकती है।

फ़्री सीमा 100 MB तक की फ़ाइल स्वीकार करती है — असली सीमा उससे ज़्यादा डिवाइस की मेमोरी की है।

ज़रूरी जानकारी, एक जगह

NDJSON फ़ॉर्मेट की पहचान और उसका स्रोत।
एक्सटेंशन.ndjson, .jsonl
मीडिया टाइपapplication/x-ndjson
पहली बार प्रकाशित2013