आँकड़ों और विज्ञापन के लिए कुकीज़
हम आँकड़ों और विज्ञापन के लिए कुकीज़ इस्तेमाल करते हैं, दोनों Google को जाती हैं। मना करने से आपको दिखने वाली किसी चीज़ में कोई फ़र्क़ नहीं पड़ता।निजता पेज पढ़ें
यहाँ आप YAML को NDJSON में बदलते हैं, मुफ़्त और बिना खाते के: फ़ाइल ऊपर छोड़िए और कुछ ही सेकंड में नतीजा डाउनलोड के लिए तैयार मिलेगा। कन्वर्ज़न आपके अपने ब्राउज़र के भीतर होता है, इसलिए फ़ाइल कभी अपलोड नहीं होती। यह Windows, macOS और Linux पर वैसे ही चलता है जैसे iPhone और Android पर, और कनेक्शन काट देने पर भी चलता रहता है।
एक बार में 100 फ़ाइलें। फ़ॉर्मेट अलग-अलग हों तो भी चलेगा।
ये एक के बाद एक बदलती हैं और साथ में एक ZIP बनकर उतरती हैं।
YAML से NDJSON
NDJSON, JSON है नई लाइन के नियम के साथ: प्रति लाइन एक पूरा मान, कोई कॉमा नहीं, कोई घेरने वाला कोष्ठक नहीं। इसे बनाने के लिए किसी को तय करना पड़ता है एक रिकॉर्ड कहाँ ख़त्म होता है और अगला कहाँ शुरू, और YAML फ़ाइल में सिर्फ़ शीर्ष-स्तरीय सूची यह बताती है।
बाक़ी सब एक लाइन है। जड़ पर mapping एक ही मान है चाहे उसके भीतर कितना भी नेस्ट हो, तो कोई Kubernetes manifest, compose फ़ाइल या application कॉन्फ़िग कुछ किलोबाइट की एक लाइन बनकर निकलती है। यह नाकामी नहीं, और आम तौर पर वह नहीं जो बदलने वाला चाहता था।
अगर चाही गई रिकॉर्ड किसी कुंजी के नीचे नेस्टेड हैं — सूची रखने वाली users कुंजी, सूची रखने वाली events कुंजी — बदलाव अंदर पहुँचकर उन्हें नहीं ढूँढेगा। यह सिर्फ़ जड़ देखता है। हल है बदलने से पहले उस सूची को दस्तावेज़ की चोटी पर लाना, जो एडिटर में पहली लाइन मिटाकर बाक़ी को बाहर खींचना है।
विकल्प है JSON में बदलकर jq से चुनना और स्ट्रीम करना: ऐरे निकालना और उसे प्रति तत्व एक लाइन देना एक ही expression है। यह बेहतर रास्ता है जब यह निकासी बार-बार होनी है, क्योंकि यह स्क्रिप्ट में लिखी जा सकती है।
YAML anchor किसी ब्लॉक को एक बार परिभाषित करने और कई बार इशारा करने देते हैं, और parser लिखने से पहले हर alias को पूरी प्रति में बदल देता है। तो NDJSON YAML से बड़ी होती है, कभी-कभी काफ़ी।
स्ट्रीम के लिए यह क़ीमत नहीं, माँग है। NDJSON पढ़ने वाला एक बार में एक लाइन पढ़ता है और शायद बाक़ी कभी न देखे हों — यही इस फ़ॉर्मेट की पूरी वजह है, और यही किसी loader को worker में फ़ाइल बाँटने या नाकामी के बाद फिर शुरू करने देता है।
--- से बँटी YAML स्ट्रीम धारणात्मक रूप से पहले से NDJSON है: प्रति दस्तावेज़ एक रिकॉर्ड, क्रम में। यह इस पूरे परिवार में सबसे क़रीबी बनावट मेल है, और यह इकलौता इनपुट है जो यह बदलाव नकारता है, क्योंकि parser एक दस्तावेज़ पढ़ता है और दूसरा मिलने पर रुक जाता है।
तरीक़ा टूल नहीं, टेक्स्ट संपादन है। हर --- को शीर्ष-स्तरीय सूची चिह्न से बदलिए और नीचे दस्तावेज़ इंडेंट कीजिए, और फ़ाइल ठीक वही स्ट्रीम बनकर बदलेगी जिसकी उम्मीद थी।
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 कर दीजिए।
जो सूची अपनी वस्तुओं में एक जैसी कुंजी नहीं रखती वह बिना शिकायत बदल जाती है, और हर लाइन सिर्फ़ अपने रिकॉर्ड की कुंजियाँ रखती है। यह उसी डेटा को CSV में बदलने पर असली फ़ायदा है, जहाँ कॉलम हर रिकॉर्ड का मिलन होने चाहिए।
क्या गंतव्य उतना ही ढीला है यह अलग सवाल है। Schema-on-read स्टोर बिखरी लाइनें ख़ुशी से लेता है; तय स्कीमा वाला table loader अनपेक्षित फ़ील्ड नकार देगा या null कर देगा। बड़े नतीजे की पहली और आख़िरी कुछ लाइनें देखना लायक़ है।
YAML टिप्पणियाँ छोड़ दी जाती हैं, और NDJSON के पास उन्हें रखने की जगह नहीं: यह प्रति-लाइन JSON है, और JSON में टिप्पणी वाक्य-रचना नहीं। कोई हेडर लाइन भी नहीं, कोई स्कीमा घोषणा नहीं, कोई मेटाडेटा ब्लॉक नहीं।
यह ग़ैर-मौजूदगी फ़ॉर्मेट में जान-बूझकर है और पाइपलाइन में इसका सम्मान करना ज़रूरी है। अगर load को कोई स्रोत, बैच पहचानकर्ता या स्कीमा वर्ज़न जानना है, वह हर रिकॉर्ड के किसी फ़ील्ड में या फ़ाइल के नाम में होना चाहिए, किसी प्रस्तावना में नहीं।
अगर YAML डेटा की बजाय कॉन्फ़िगरेशन है, इस बदलाव के पास देने को कुछ नहीं। Minified JSON की एक लाइन हर उस लिहाज़ से YAML से बुरी है जो किसी इंसान को मायने रखता है, और कोई स्ट्रीम पढ़ने वाला कॉन्फ़िग फ़ाइल नहीं चाहता था।
यह जोड़ी तब लायक़ है जब फ़ाइल सच में सूची है — एक्सपोर्ट किए रिकॉर्ड, fixture, हाथ से लिखा इवेंट लॉग, seed डेटासेट — और गंतव्य लाइनें पढ़ता है। उस हालत में बदलाव तुरंत है, पूरी तरह आपके ब्राउज़र में चलता है।
| YAML | NDJSON | |
|---|---|---|
| पूरा नाम | YAML Ain't Markup Language | Newline-Delimited JSON |
| फ़ाइल एक्सटेंशन | .yaml, .yml | .ndjson, .jsonl |
| मीडिया टाइप | application/yaml | application/x-ndjson |
| पहली बार प्रकाशित | 2001 | 2013 |
| विनिर्देश | YAML 1.2 | — |
| लाइसेंस | खुला मानक | खुला मानक |
| आज की स्थिति | मौजूदा | मौजूदा |
| ब्राउज़र में खुलता है | कोई ब्राउज़र नहीं | कोई ब्राउज़र नहीं |
| इसकी जगह विचारणीय | JSON, TOML | JSON, CSV |
टिप्पणियाँ साथ नहीं जातीं। YAML में फ़ाइल के साथ समझाइश लिखी जा सकती है और NDJSON में उसके लिए कोई वाक्य-रचना ही नहीं, इसलिए हर समझाने वाली पंक्ति छूट जाती है — और चोट ठीक उन्हीं फ़ाइलों पर पड़ती है जिन पर टिप्पणियाँ लिखी जाती हैं: वह कॉन्फ़िगरेशन जिसे किसी और को सँभालना है।
कुछ नहीं खोता। YAML और NDJSON — दोनों अपनी सामग्री बिना नुक़सान सँभालते हैं: यह कन्वर्ज़न पैकिंग बदलता है, गुणवत्ता नहीं, और आप इसे दोहरा सकते हैं बिना इस डर के कि नुक़सान जमा होता जाएगा।
दोनों तरफ़ के प्रोग्राम अलग हैं: YAML फ़ाइल Visual Studio Code और yq में खुलती है और NDJSON फ़ाइल jq और pandas में — यानी नतीजा जिसके पास जाएगा, उसे दूसरी सूची में से कोई प्रोग्राम चाहिए होगा।
YAML 2001 में आया। यह YAML 1.2 में तय किया गया है, और अगर फ़ाइल को उस औज़ार से ज़्यादा जीना है जिसने उसे लिखा, तो यह बात क़ीमती है।
NDJSON 2013 से चला आ रहा है। jq और pandas इस फ़ॉर्मेट को पढ़ लेते है।
नहीं। यह कन्वर्ज़न पूरी तरह आपके ब्राउज़र में होता है, इसलिए फ़ाइल आपके डिवाइस से बाहर नहीं जाती। आप ख़ुद जाँच सकते हैं: डेवलपर टूल्स का नेटवर्क टैब खोलिए और कुछ बदल कर देखिए। आपको पेज ख़ुद दिखेगा और आँकड़ों तथा विज्ञापन के वे अनुरोध दिखेंगे जिनसे इस सेवा का ख़र्च निकलता है — और एक भी ऐसा अनुरोध नहीं जो आपकी फ़ाइल साथ ले जा रहा हो।
हाँ। न खाता, न वॉटरमार्क, और न कोई रोज़ का कोटा जो ख़त्म हो: यह आपकी अपनी मशीन पर चलता है, इसलिए आप जितनी बार चाहें लौट सकते हैं। ब्राउज़र 100 MB तक की फ़ाइलें सँभालता है, एक बार में 100।
नहीं। NDJSON वही सामग्री बिना कुछ फेंके सँभालता है: नतीजा गुणवत्ता में असली फ़ाइल जैसा ही होता है।
कुछ नहीं खोता। YAML और NDJSON — दोनों अपनी सामग्री बिना नुक़सान सँभालते हैं: यह कन्वर्ज़न पैकिंग बदलता है, गुणवत्ता नहीं, और आप इसे दोहरा सकते हैं बिना इस डर के कि नुक़सान जमा होता जाएगा।
टिप्पणियाँ साथ नहीं जातीं। YAML में फ़ाइल के साथ समझाइश लिखी जा सकती है और NDJSON में उसके लिए कोई वाक्य-रचना ही नहीं, इसलिए हर समझाने वाली पंक्ति छूट जाती है — और चोट ठीक उन्हीं फ़ाइलों पर पड़ती है जिन पर टिप्पणियाँ लिखी जाती हैं: वह कॉन्फ़िगरेशन जिसे किसी और को सँभालना है।