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

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

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

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

XML दस्तावेज़ हमेशा ठीक एक लाइन क्यों बनता है

लाइन-दर-लाइन JSON को बाँटने के लिए कुछ चाहिए, और यहाँ बाँट पार्स किए डेटा के बाहरी हिस्से में मौजूद किसी सूची पर होती है। XML पार्स करना कभी सूची नहीं देता: नतीजा हमेशा एक ऑब्जेक्ट है, जिसकी एक ही कुंजी रूट एलिमेंट का नाम है, जिसके भीतर बाक़ी सब है। एक मूल्य अंदर, एक लाइन बाहर।

यह फ़ाइल चाहे कितनी बड़ी हो और उसमें कितने दोहराए एलिमेंट हों, बात यही रहती है। दस हज़ार रिकॉर्ड का 40 MB निर्यात एक ही 40 MB लाइन में बदलता है। कुछ खोता नहीं और कुछ बँटता नहीं, और अगर चाहिए था दस हज़ार लाइनें, तो यह बदलाव वह नहीं करता।

XML निर्यात से प्रति रिकॉर्ड एक लाइन कैसे पाएँ

जो रास्ता काम करता है वह दो-चरणों वाला है। फ़ाइल को पहले JSON में बदलिए, फिर jq से चलाइए: दोहराए एलिमेंट का रास्ता चुनिए, उस पर पुनरावृति कीजिए, और हर ऑब्जेक्ट को अपनी लाइन पर लाने के लिए compact आउटपुट फ़्लैग इस्तेमाल कीजिए। यह एक ही कमांड है, स्क्रिप्ट में दोहराया जा सकता है, और रिकॉर्ड की परिभाषा आपके हाथ में रखता है।

कोई कन्वर्टर अकेले दस्तावेज़ से यह चुनाव नहीं कर सकता। किसी RSS फ़ीड में रिकॉर्ड item एलिमेंट है; किसी SOAP जवाब में शायद body के तीन स्तर भीतर कोई पंक्ति हो; किसी बैंक निर्यात में जो भी वेंडर ने लेन-देन कहा हो।

वे हालात जहाँ प्रति फ़ाइल एक लाइन बिलकुल ठीक है

यह जोड़ी बेकार नहीं है। अगर इनपुट एक बड़े दस्तावेज़ के बजाय कई छोटे XML दस्तावेज़ हैं — इनवॉइस की डायरेक्टरी, मैनिफ़ेस्ट का फ़ोल्डर, प्रति-इवेंट पेलोड का बैच — तो प्रति फ़ाइल एक लाइन ठीक वही आकार है जो कोई लोडर चाहता है, और आउटपुट जोड़ने पर प्रति स्रोत दस्तावेज़ एक रिकॉर्ड वाली मान्य NDJSON धारा बनती है।

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

आकार की दिक़्क़त जो रिकॉर्ड बँटने के बाद भी साथ चलती है

रिकॉर्ड बाँटने के बाद भी XML का एक बर्ताव साथ रहता है। दोहराया एलिमेंट सरणी तभी बनता है जब वह दोहराए: एक टैग वाला रिकॉर्ड स्ट्रिंग देता है, दो वाला स्ट्रिंग की सूची। एक ही निर्यात में कुछ लाइनों में सरणी होगी और कुछ में नहीं।

स्कीमा-ऑन-रीड स्टोर पहली दिखी लाइनों से प्रकार का अंदाज़ा लगाता है और बाक़ी को ठुकरा या ज़बरदस्ती बदल देता है। सुधार लोडर में नहीं, jq पास में होना चाहिए: हर वह फ़ील्ड जो दोहरा सकती है उसे सरणी में सामान्य कीजिए, हर लाइन लिखते वक़्त।

लाइन में असल में क्या होता है

बिना इंडेंट का सघन JSON, कुंजियाँ दस्तावेज़ क्रम में, एक नई लाइन पर ख़त्म। एट्रिब्यूट @ उपसर्ग वाली कुंजियों की तरह दिखते हैं, और जिस टैग में एट्रिब्यूट और पाठ दोनों हों उसका पाठ #text नाम की कुंजी में आता है। नेमस्पेस उपसर्ग कुंजी नाम के भीतर ही रहता है, इसलिए soap:Body ऐसी कुंजी है जिसमें कोलन है।

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

XML पार्सर से जैसे प्रकार आते हैं

जो मूल्य संख्या जैसा दिखे उसे पार्स कर दिया जाता है, एट्रिब्यूट और एलिमेंट पाठ दोनों में। यह गिनती के लिए सुविधाजनक है और पहचान के लिए विनाशकारी: 007 लिखा ऑर्डर संदर्भ संख्या 7 बनकर आता है, और 1.0 लिखा वर्शन एट्रिब्यूट 1 बनकर।

एक हालत उम्मीद से बेहतर बरतती है: JSON संख्या के रूप में न टिकने लायक़ बहुत लंबा पूर्णांक गोल होने के बजाय स्ट्रिंग रहता है, इसलिए उन्नीस अंकों का कोई संदर्भ पूरा बचा रहता है।

नतीजा लोड करना, और वह लाइन लंबाई जिसकी योजना कोई नहीं बनाता

NDJSON को jq, pandas (lines विकल्प के साथ) और आम वेयरहाउस लोडर सीधे पढ़ते हैं। Elasticsearch bulk को हर दस्तावेज़ से पहले एक action लाइन चाहिए, जो रिकॉर्ड बाँटने वाले उसी jq पास में जोड़ी जा सकती है।

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

जब स्ट्रीमिंग XML पार्सर सही जवाब है

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

यह तरीक़ा याददाश्त से बड़ी फ़ाइलों में भी टिकता है, जो इस पन्ने का कोई भी हिस्सा नहीं करता — पार्सिंग यहाँ पहली बाइट लिखे जाने से पहले पूरा दस्तावेज़ JavaScript ऑब्जेक्ट के रूप में बना लेती है।

टिप्पणियाँ, और लाइन-दर-लाइन फ़ाइल जो नहीं रख सकती

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

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

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

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

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

XML और NDJSON की तुलना
XMLNDJSON
पूरा नामExtensible Markup LanguageNewline-Delimited JSON
फ़ाइल एक्सटेंशन.xml.ndjson, .jsonl
मीडिया टाइपapplication/xmlapplication/x-ndjson
पहली बार प्रकाशित19982013
प्रकाशकW3C
विनिर्देशXML 1.0
लाइसेंसखुला मानकखुला मानक
आज की स्थितिमौजूदामौजूदा
ब्राउज़र में खुलता हैहर ब्राउज़रकोई ब्राउज़र नहीं
इसकी जगह विचारणीयJSON, YAMLJSON, CSV

क्या खो जाता है

टिप्पणियाँ साथ नहीं जातीं। XML में फ़ाइल के साथ समझाइश लिखी जा सकती है और NDJSON में उसके लिए कोई वाक्य-रचना ही नहीं, इसलिए हर समझाने वाली पंक्ति छूट जाती है — और चोट ठीक उन्हीं फ़ाइलों पर पड़ती है जिन पर टिप्पणियाँ लिखी जाती हैं: वह कॉन्फ़िगरेशन जिसे किसी और को सँभालना है।

नतीजा खोलना

NDJSON को कोई भी ब्राउज़र नहीं पढ़ता। इस लिहाज़ से दोनों में यही कम जगह चलने वाला है। भेजने से पहले देख लीजिए कि पाने वाला इसे लेता भी है या नहीं।

दोनों तरफ़ के प्रोग्राम अलग हैं: XML फ़ाइल Visual Studio Code और oXygen XML Editor में खुलती है और NDJSON फ़ाइल jq और pandas में — यानी नतीजा जिसके पास जाएगा, उसे दूसरी सूची में से कोई प्रोग्राम चाहिए होगा।

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

XML W3C का फ़ॉर्मेट है, जो 1998 में आया। यह XML 1.0 में तय किया गया है, और अगर फ़ाइल को उस औज़ार से ज़्यादा जीना है जिसने उसे लिखा, तो यह बात क़ीमती है।

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

XML 1998 में आया और NDJSON 2013 में। किसी को सौंपने के लिए आम तौर पर पुराना वाला ज़्यादा सुरक्षित रहता है; नया वाला वही काम कम बाइट में कर देता है।

XML से NDJSON: आम सवाल

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

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

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

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

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

XML और NDJSON सामग्री का वर्णन बुनियादी तौर पर अलग-अलग तरीक़ों से करते हैं। इसलिए यह कन्वर्ज़न नक़ल नहीं, पुनर्निर्माण है: ईमानदार, पर बाइट-दर-बाइट एक जैसा नहीं। XML के गुण और लिखावट वाली गाँठें — दोनों कुंजी बन जाते हैं, और यह फ़ैसला कन्वर्टर आपकी जगह ख़ुद करता है।

क्या NDJSON फ़ाइल ब्राउज़र में खुलती है?

NDJSON को कोई भी ब्राउज़र नहीं पढ़ता। इस लिहाज़ से दोनों में यही कम जगह चलने वाला है। भेजने से पहले देख लीजिए कि पाने वाला इसे लेता भी है या नहीं।

XML से NDJSON जाने पर क्या टिप्पणियाँ बची रहती हैं?

टिप्पणियाँ साथ नहीं जातीं। XML में फ़ाइल के साथ समझाइश लिखी जा सकती है और NDJSON में उसके लिए कोई वाक्य-रचना ही नहीं, इसलिए हर समझाने वाली पंक्ति छूट जाती है — और चोट ठीक उन्हीं फ़ाइलों पर पड़ती है जिन पर टिप्पणियाँ लिखी जाती हैं: वह कॉन्फ़िगरेशन जिसे किसी और को सँभालना है।

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