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

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

  • कहाँ चलता है आपके ब्राउज़र में। फ़ाइल कभी अपलोड नहीं होती।
  • बिना नुक़सान कुछ नहीं छोड़ा जाता। YAML में जो था, NDJSON में ठीक वही रहता है।
  • फ़ाइल आकार की सीमा हर फ़ाइल 100 MB तक, मुफ़्त, बिना खाते के।

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

रिकॉर्ड की सीमा, और इकलौती YAML बनावट जिसमें एक है

NDJSON, JSON है नई लाइन के नियम के साथ: प्रति लाइन एक पूरा मान, कोई कॉमा नहीं, कोई घेरने वाला कोष्ठक नहीं। इसे बनाने के लिए किसी को तय करना पड़ता है एक रिकॉर्ड कहाँ ख़त्म होता है और अगला कहाँ शुरू, और YAML फ़ाइल में सिर्फ़ शीर्ष-स्तरीय सूची यह बताती है।

बाक़ी सब एक लाइन है। जड़ पर mapping एक ही मान है चाहे उसके भीतर कितना भी नेस्ट हो, तो कोई Kubernetes manifest, compose फ़ाइल या application कॉन्फ़िग कुछ किलोबाइट की एक लाइन बनकर निकलती है। यह नाकामी नहीं, और आम तौर पर वह नहीं जो बदलने वाला चाहता था।

mapping वाली YAML फ़ाइल से स्ट्रीम निकालना

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

विकल्प है JSON में बदलकर jq से चुनना और स्ट्रीम करना: ऐरे निकालना और उसे प्रति तत्व एक लाइन देना एक ही expression है। यह बेहतर रास्ता है जब यह निकासी बार-बार होनी है, क्योंकि यह स्क्रिप्ट में लिखी जा सकती है।

Anchor फैलाना स्ट्रीम के लिए सही व्यवहार क्यों है

YAML anchor किसी ब्लॉक को एक बार परिभाषित करने और कई बार इशारा करने देते हैं, और parser लिखने से पहले हर alias को पूरी प्रति में बदल देता है। तो NDJSON YAML से बड़ी होती है, कभी-कभी काफ़ी।

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

बहु-दस्तावेज़ YAML फ़ाइल जिसे बदलना चाहिए और नहीं होता

--- से बँटी YAML स्ट्रीम धारणात्मक रूप से पहले से NDJSON है: प्रति दस्तावेज़ एक रिकॉर्ड, क्रम में। यह इस पूरे परिवार में सबसे क़रीबी बनावट मेल है, और यह इकलौता इनपुट है जो यह बदलाव नकारता है, क्योंकि parser एक दस्तावेज़ पढ़ता है और दूसरा मिलने पर रुक जाता है।

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

NDJSON को माँगने वाले सिस्टम में लोड करना

NDJSON क़रीब 2013 से line-oriented टूलिंग का इंटरचेंज फ़ॉर्मेट रहा है, और गंतव्य थोड़ी अलग-अलग चीज़ें चाहते हैं। BigQuery और Snowflake newline-delimited JSON को सीधे load फ़ॉर्मेट के तौर पर लेते हैं। jq इसे बिना किसी फ़्लैग के पढ़ता है।

Elasticsearch वह अपवाद है जिस पर लोग अटकते हैं। इसका bulk API NDJSON-आकार का है पर हर दस्तावेज़ से पहले एक निर्देश लाइन चाहता है, तो सादे रिकॉर्ड की फ़ाइल नकारी जाती है। निर्देश लाइनें बुनना एक jq या awk पास है, और यह यहाँ जान-बूझकर नहीं किया जाता।

तार पर मान कैसे दिखते हैं

हर लाइन compact JSON है: कोई इंडेंटेशन नहीं, कोलन के बाद कोई स्पेस नहीं, कुंजियाँ YAML के क्रम में। फ़ाइल UTF-8 है और नई लाइन पर ख़त्म होती है, जो ज़्यादातर loader माँगते हैं।

टाइप writer से नहीं, YAML parser से आते हैं। YAML 1.2 के तहत बिना quote वाली तारीख़ स्ट्रिंग रहती है। बड़े पूर्णांक इकलौता ख़ामोश ख़तरा हैं: 9223372036854775807 लिखी पहचान संख्या 9223372036854776000 बनकर निकलती है, क्योंकि JSON संख्याएँ IEEE double हैं। YAML में उन्हें बदलने से पहले quote कर दीजिए।

एक YAML सूची में अलग-अलग बनावट वाले रिकॉर्ड

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

क्या गंतव्य उतना ही ढीला है यह अलग सवाल है। Schema-on-read स्टोर बिखरी लाइनें ख़ुशी से लेता है; तय स्कीमा वाला table loader अनपेक्षित फ़ील्ड नकार देगा या null कर देगा। बड़े नतीजे की पहली और आख़िरी कुछ लाइनें देखना लायक़ है।

टिप्पणियाँ, और जो चीज़ें स्ट्रीम नहीं ढो सकती

YAML टिप्पणियाँ छोड़ दी जाती हैं, और NDJSON के पास उन्हें रखने की जगह नहीं: यह प्रति-लाइन JSON है, और JSON में टिप्पणी वाक्य-रचना नहीं। कोई हेडर लाइन भी नहीं, कोई स्कीमा घोषणा नहीं, कोई मेटाडेटा ब्लॉक नहीं।

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

कब YAML फ़ाइल को दस्तावेज़ ही रहने दें

अगर YAML डेटा की बजाय कॉन्फ़िगरेशन है, इस बदलाव के पास देने को कुछ नहीं। Minified JSON की एक लाइन हर उस लिहाज़ से YAML से बुरी है जो किसी इंसान को मायने रखता है, और कोई स्ट्रीम पढ़ने वाला कॉन्फ़िग फ़ाइल नहीं चाहता था।

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

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

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

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

YAML और NDJSON की तुलना
YAMLNDJSON
पूरा नामYAML Ain't Markup LanguageNewline-Delimited JSON
फ़ाइल एक्सटेंशन.yaml, .yml.ndjson, .jsonl
मीडिया टाइपapplication/yamlapplication/x-ndjson
पहली बार प्रकाशित20012013
विनिर्देशYAML 1.2
लाइसेंसखुला मानकखुला मानक
आज की स्थितिमौजूदामौजूदा
ब्राउज़र में खुलता हैकोई ब्राउज़र नहींकोई ब्राउज़र नहीं
इसकी जगह विचारणीयJSON, TOMLJSON, CSV

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

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

क्या बचा रहता है

कुछ नहीं खोता। YAML और NDJSON — दोनों अपनी सामग्री बिना नुक़सान सँभालते हैं: यह कन्वर्ज़न पैकिंग बदलता है, गुणवत्ता नहीं, और आप इसे दोहरा सकते हैं बिना इस डर के कि नुक़सान जमा होता जाएगा।

नतीजा खोलना

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

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

YAML 2001 में आया। यह YAML 1.2 में तय किया गया है, और अगर फ़ाइल को उस औज़ार से ज़्यादा जीना है जिसने उसे लिखा, तो यह बात क़ीमती है।

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

YAML से NDJSON: आम सवाल

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

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

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

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

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

नहीं। NDJSON वही सामग्री बिना कुछ फेंके सँभालता है: नतीजा गुणवत्ता में असली फ़ाइल जैसा ही होता है।

क्या YAML से NDJSON बिना नुक़सान का है?

कुछ नहीं खोता। YAML और NDJSON — दोनों अपनी सामग्री बिना नुक़सान सँभालते हैं: यह कन्वर्ज़न पैकिंग बदलता है, गुणवत्ता नहीं, और आप इसे दोहरा सकते हैं बिना इस डर के कि नुक़सान जमा होता जाएगा।

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

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

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