XLSX को NDJSON में बदलें

यहाँ आप XLSX को NDJSON में बदलते हैं, मुफ़्त और बिना खाते के: फ़ाइल ऊपर छोड़िए और कुछ ही सेकंड में नतीजा डाउनलोड के लिए तैयार मिलेगा। कन्वर्ज़न आपके अपने ब्राउज़र के भीतर होता है, इसलिए फ़ाइल कभी अपलोड नहीं होती। यह Windows, macOS और Linux पर वैसे ही चलता है जैसे iPhone और Android पर, और कनेक्शन काट देने पर भी चलता रहता है।

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

एक बार में 100 फ़ाइलें। फ़ॉर्मेट अलग-अलग हों तो भी चलेगा।

रिकॉर्ड को एक-प्रति-लाइन में क्यों चाहिए होता है

JSON ऐरे एक ही मान है। उसमें आख़िरी ऑब्जेक्ट पढ़ने के लिए पहले सब कुछ पार्स करना पड़ता है, यानी पूरा दस्तावेज़ मेमोरी में रखना या partial बनावट समझने वाला streaming parser इस्तेमाल करना। कॉन्फ़िग फ़ाइल के लिए यह बेमानी है। चालीस लाख पंक्तियों के लिए यही फ़र्क़ है काम करते import और ऑपरेटिंग सिस्टम के मार डाले प्रोसेस के बीच।

Newline-delimited JSON कंटेनर हटाकर समस्या हटा देता है। हर लाइन पूरा, स्वतंत्र JSON मान है, तो पढ़ने वाला एक लाइन पढ़ता है, कुछ करता है, छोड़ देता है और तय मेमोरी के साथ आगे बढ़ता है। यही इकलौता गुण है जिसके लिए bulk loader, log shipper और वेयरहाउस ingest काम सब एक ही शक्ल पर मिल गए।

लाइन मतलब रिकॉर्ड, गारंटी के साथ

यह गारंटी तभी टिकती है जब डेटा में कुछ भी अपनी तरफ़ से नई लाइन न बना सके, और यह बदलाव इसे लागू करता है। लाइन-ब्रेक वाला सेल — कई-लाइन का पता, Alt+Enter से टाइप की टिप्पणी — JSON स्ट्रिंग के भीतर escape होकर लिखा जाता है, तो रिकॉर्ड एक लाइन पर रहता है। सेल के भीतर tab भी उसी तरह escape होता है।

यह delimited फ़ाइल के मुक़ाबले असली फ़ायदा है। उसी शीट का tab-separated एक्सपोर्ट किसी अजीब सेल को उद्धरण चिह्न में लपेटने पर निर्भर है और उम्मीद करता है reader वह रिवाज़ जानता हो; यहाँ लागू करने को कुछ नहीं। फ़ाइल को दस-हज़ार-लाइन के टुकड़ों में बाँटना सुरक्षित है, लाइन गिनना ही रिकॉर्ड गिनती है।

जो टाइप स्प्रेडशीट जानती थी, वे दर्ज हो जाते हैं

Delimited फ़ाइल में एक टाइप होता है: टेक्स्ट। जो भी पढ़ता है उसे अंदाज़ा लगाना पड़ता है, और यहीं पहचान संख्या पूर्णांक बन जाती है और वर्ज़न नंबर दशमलव। JSON फ़र्क़ साफ़ रखता है, तो मात्रा 12 लिखी जाती है, फ़्लैग true, गुम मान null, और स्प्रेडशीट में टेक्स्ट रहा प्रोडक्ट कोड अपने अगुआ शून्य लिए quote में रहता है।

टाइप्ड गंतव्य में लोड करने के लिए यह असली समय बचाता है। जिस स्कीमा की आप घोषणा करते हैं और जो मान आप देते हैं वे बीच में coercion परत के बिना सहमत होते हैं। टाइप स्प्रेडशीट से आते हैं, टेक्स्ट पर अंदाज़े से नहीं — यही अहम हिस्सा है।

ख़ुद-को-बताने वाली बनावट की क़ीमत

हर लाइन हर कुंजी दोहराती है। छह कॉलम की पचास हज़ार पंक्तियों का मतलब है छह फ़ील्ड नामों की पचास हज़ार प्रतियाँ, जो एक असली शीट पर क़रीब 4.4 MB बनीं, उसी डेटा के tab-separated टेक्स्ट के 1.8 MB के मुक़ाबले — क़रीब ढाई गुना।

यह सौदा इस गंतव्य के लिए आम तौर पर सही है, क्योंकि फ़ाइल किसी मशीन से एक बार पढ़ी जाने वाली है, हमेशा के लिए सहेजी जाने वाली नहीं। अगर वही रिकॉर्ड बार-बार क्वेरी होने हैं, columnar शक्ल बेहतर है। NDJSON परिवहन फ़ॉर्मेट है, भंडारण फ़ॉर्मेट नहीं।

फ़ाइल खोले बिना उसे प्रोसेस करना

औज़ार इसी बनावट से निकलते हैं। `wc -l` सटीक पंक्ति गिनती देता है, क्योंकि प्रति रिकॉर्ड एक लाइन है और आख़िर में नई लाइन। `head -1` फ़ील्ड नाम वैसे दिखाता है जैसे असल में लिखे गए। `split -l 10000` ऐसे टुकड़े देता है जो अपने आप में वैध हैं।

इससे ज़्यादा के लिए, jq एक दस्तावेज़ की बजाय मानों की धारा पढ़ता है, तो `jq -c "select(.qty > 100)"` मेमोरी से बड़ी फ़ाइल फ़िल्टर करता है और वही फ़ॉर्मेट देता है जो पढ़ा। यही रचनाशीलता इस शक्ल में बदलने की वजह है।

Bulk endpoint को इसके ऊपर क्या चाहिए

हर API जो newline-delimited JSON कहता है वही मतलब नहीं रखती। Elasticsearch और OpenSearch bulk रिक्वेस्ट हर दस्तावेज़ से पहले एक निर्देश लाइन लपेटते हैं, तो body में रिकॉर्ड से दोगुनी लाइनें होती हैं और यह आउटपुट payload की बजाय कच्चा माल है।

फ़ॉर्मेट को जैसा है वैसा लेने वाले loader भी हैं और आम मामला हैं: newline-delimited JSON पर तय वेयरहाउस load काम, प्रति संदेश एक लाइन पढ़ने वाला queue producer। गंतव्य का दस्तावेज़ जाँचिए कि उसे रिकॉर्ड चाहिए या request body।

वह तारीख़ फ़ील्ड जिसे आपका loader बिना शिकायत स्वीकारेगा

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

यह इस जोड़ी पर ख़ास तौर पर देखने लायक़ नाकामी है, क्योंकि JSON संख्याएँ वैध हैं और numeric कॉलम वाला loader 45292 बिना कुछ बताए स्वीकार लेगा। उन फ़ील्ड को जान-बूझकर बदलिए — फ़ाइल पर jq क़दम में, या loading के बाद लक्ष्य में।

Null, बिखरी पंक्तियाँ, और कौन-सी शीट इस्तेमाल होती है

ख़ाली सेल छोड़ने की बजाय null लिखा जाता है, तो हर ऑब्जेक्ट एक जैसी कुंजियाँ रखता है। जहाँ बाद की पंक्तियाँ ऐसा फ़ील्ड लाती हैं जो पहले नहीं था, कुंजी सेट पूरी शीट का मिलन है, तो देर से आने के लिए कुछ नहीं छूटता।

वर्कबुक की सिर्फ़ पहली शीट बदली जाती है, क्योंकि रिकॉर्ड की धारा के पास "अब एक और टेबल" कहने का कोई तरीक़ा नहीं। ज़रूरी शीट पहली न हो तो वर्कबुक का क्रम बदलकर दोबारा बदलिए।

बदलाव कहाँ चलता है, और कितना समय लेगा

सब कुछ आपके ब्राउज़र में होता है। वर्कबुक पार्स होकर लाइनें स्थानीय तौर पर लिखी जाती हैं, बिना अपलोड, बिना कतार — जो ग्राहक रिकॉर्ड, ऑर्डर या किसी डेटा-सुरक्षा नीति के तहत आने वाली चीज़ के एक्सपोर्ट के लिए काम पर इस्तेमाल कर सकने और न कर सकने वाले टूल के बीच फ़र्क़ है।

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

कब ऐरे या column store स्ट्रीम से बेहतर है

अगर पढ़ने वाला ऐसा प्रोग्राम है जो पूरी फ़ाइल पढ़कर किसी और चीज़ को सौंपेगा — fixture, seed script, request body — JSON ऐरे वही शक्ल है जिसकी उसे उम्मीद है, और NDJSON सिर्फ़ एक जोड़ने का क़दम बढ़ाता है।

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

XLSX को NDJSON में ऐसे बदलें

  1. अपनी XLSX फ़ाइल इस पेज पर छोड़ें, या चुनने के लिए दबाएँ।
  2. लक्ष्य के रूप में NDJSON चुनें। कन्वर्ज़न आपके ब्राउज़र में होता है और फ़ाइल अपलोड नहीं होती।
  3. तैयार NDJSON फ़ाइल डाउनलोड कर लें।

XLSX या NDJSON: क्या बदलता है

XLSX और NDJSON की तुलना
XLSXNDJSON
पूरा नामExcel वर्कबुकNewline-Delimited JSON
फ़ाइल एक्सटेंशन.xlsx.ndjson, .jsonl
मीडिया टाइपapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetapplication/x-ndjson
पहली बार प्रकाशित20072013
प्रकाशकMicrosoft
विनिर्देशECMA-376
लाइसेंसखुला मानकखुला मानक
आज की स्थितिमौजूदामौजूदा
ब्राउज़र में खुलता हैकोई ब्राउज़र नहींकोई ब्राउज़र नहीं
इसकी जगह विचारणीयCSV, ODS, ParquetJSON, CSV

नतीजा खोलना

दोनों तरफ़ के प्रोग्राम अलग हैं: XLSX फ़ाइल Microsoft Excel, LibreOffice Calc और Google Sheets में खुलती है और NDJSON फ़ाइल jq और pandas में — यानी नतीजा जिसके पास जाएगा, उसे दूसरी सूची में से कोई प्रोग्राम चाहिए होगा।

कौन-सा फ़ॉर्मेट किस काम के लिए है

दोनों का निशाना अलग काम है: XLSX का एडिटिंग पर, NDJSON का प्रोग्रामों के बीच डेटा ले जाना और स्ट्रीमिंग पर। इस पर सोचना बनता है, क्योंकि जिस वजह से एक मौजूद है, आम तौर पर उसी वजह से दूसरा असुविधाजनक होता है।

XLSX Microsoft का फ़ॉर्मेट है, जो 2007 में आया। यह ECMA-376 में तय किया गया है, और अगर फ़ाइल को उस औज़ार से ज़्यादा जीना है जिसने उसे लिखा, तो यह बात क़ीमती है।

NDJSON 2013 से चला आ रहा है। jq और pandas इस फ़ॉर्मेट को पढ़ लेते है।

XLSX से NDJSON: आम सवाल

क्या मेरी XLSX फ़ाइल कहीं अपलोड होती है?

नहीं। यह कन्वर्ज़न पूरी तरह आपके ब्राउज़र में होता है, इसलिए फ़ाइल आपके डिवाइस से बाहर नहीं जाती। आप ख़ुद जाँच सकते हैं: डेवलपर टूल्स का नेटवर्क टैब खोलिए और कुछ बदल कर देखिए। आपको पेज ख़ुद दिखेगा और आँकड़ों तथा विज्ञापन के वे अनुरोध दिखेंगे जिनसे इस सेवा का ख़र्च निकलता है — और एक भी ऐसा अनुरोध नहीं जो आपकी फ़ाइल साथ ले जा रहा हो। इस जोड़ी के पीछे SheetJS है, JavaScript में लिखा स्प्रेडशीट का एक पाठक और लेखक; आपका ब्राउज़र इसे एक बार उतारता है और फिर सहेज कर रखता है।

क्या XLSX को NDJSON में बदलना मुफ़्त है?

हाँ। न खाता, न वॉटरमार्क, और न कोई रोज़ का कोटा जो ख़त्म हो: यह आपकी अपनी मशीन पर चलता है, इसलिए आप जितनी बार चाहें लौट सकते हैं। ब्राउज़र 100 MB तक की फ़ाइलें सँभालता है, एक बार में 100। SheetJS आपकी अपनी मशीन पर उतरता है और वहीं चलता है — इसीलिए उस पर कोई गिनती नहीं है।

XLSX को NDJSON में बदलने पर क्या गुणवत्ता जाती है?

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

NDJSON फ़ाइल खोलने के लिए क्या मुझे कुछ इंस्टॉल करना होगा?

कन्वर्ज़न के लिए नहीं: वह उसी ब्राउज़र में होता है जो आपने पहले से खोल रखा है। नतीजा खोलने के लिए उसके बाद वही प्रोग्राम चाहिए जिससे आपका डिवाइस Newline-Delimited JSON आम तौर पर दिखाता है।

इन फ़ॉर्मेट के बारे में और