डेटा

CSV, JSON और YAML

तीन फ़ॉर्मैट दुनिया के ज़्यादातर संरचित डेटा को ढोते हैं। उनके बीच बदलना आसान है; बिना चुपचाप कुछ बिगाड़े बदलने में थोड़ी सावधानी लगती है।

प्रकाशित:

हर एक किसलिए है

CSV एक टेबल है: पंक्तियाँ और कॉलम, और कुछ नहीं। यह सार्वभौमिक रूप से पढ़ने योग्य, बहुत छोटा है, और किसी नेस्टेड चीज़ को व्यक्त नहीं कर सकता। JSON एक पेड़ है — ऐरे के भीतर ऑब्जेक्ट और ऑब्जेक्ट के भीतर ऐरे — और लगभग हर वेब API यही बोलती है। YAML वही संरचनाएँ JSON की तरह व्यक्त करता है लेकिन ब्रेस की जगह इंडेंटेशन से, जिससे इंसानों के लिए पढ़ना और संपादित करना कहीं सुखद है, और इसी वजह से कॉन्फ़िगरेशन फ़ाइलें उसकी ओर खिसक गई हैं।

टाइप कोअर्शन का जाल

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

  • 01234 जैसा पोस्टकोड संख्या 1234 बन जाता है, शुरू का शून्य खो जाता है।
  • 1-2 जैसा प्रोडक्ट कोड तारीख बन जाता है।
  • लंबा खाता नंबर फ़्लोटिंग पॉइंट बन जाता है और अपने आखिरी अंक खो देता है।
  • NA, यानी North America, "not available" बन जाता है।

इनमें से हर एक चुपचाप होता है। इसीलिए सावधानी से किए गए CSV-से-JSON रूपांतरण को हर वैल्यू स्ट्रिंग ही रहने देनी चाहिए और फ़ैसला आप पर छोड़ना चाहिए — जो इस साइट का कन्वर्टर जानबूझकर करता है, भले ही पहले यह ज़रूरत से ज़्यादा बारीक लगे।

CSV तक के सफ़र में क्या नहीं बचता

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

YAML की नुकीली किनारियाँ

YAML पढ़ने में सुखद है और असामान्य रूप से आसानी से गलत हो जाता है।

  • इंडेंटेशन ही संरचना है, और टैब की अनुमति नहीं है। गलत जगह का एक स्पेस त्रुटि देने के बजाय अर्थ बदल देता है।
  • कुछ सादे शब्द बूलियन होते हैं। पुराने YAML में y, n, on, off, yes और no सब true या false के रूप में पार्स होते हैं — इसलिए नॉर्वे के लिए NO वाला देश कॉलम false बन जाता है। उन्हें कोट में रखें।
  • JSON में बदलने पर कमेंट गायब हो जाते हैं, क्योंकि JSON में उन्हें दर्शाने का कोई तरीका नहीं है।

राउंड-ट्रिप की गारंटी नहीं है

JSON को YAML में और वापस बदलने पर आमतौर पर वही मिलता है जिससे आपने शुरू किया था। CSV को JSON में और वापस बदलने पर आमतौर पर नहीं मिलता: कोटिंग शैली, अलग आकार वाले रिकॉर्ड के लिए कॉलम का क्रम, और खाली वैल्यू का निरूपण सब चुनाव हैं, और अलग टूल अलग चुनते हैं। अगर राउंड ट्रिप का ठीक-ठीक होना ज़रूरी है, तो मान लेने के बजाय जाँच लें।

इनके बीच बदलने के लिए: CSV को JSON में बदलें, JSON को CSV में बदलें, या JSON को YAML में बदलें — और नतीजा जाँच लें, क्योंकि राउंड-ट्रिप हमेशा ठीक-ठीक नहीं होता।