CSV को JSON में बदलें और वापस, बिना डेटा बिगड़े
CSV एक सादा टेक्स्ट वाली टेबल है: हर रिकॉर्ड अलग लाइन पर होता है, और फ़ील्ड आम तौर पर कॉमा जैसे विभाजक चिह्न से अलग किए जाते हैं। जब किसी फ़ील्ड में विभाजक चिह्न, डबल कोट या नई लाइन हो, तब यह टूट जाती है, क्योंकि पढ़ने वाले को संरचना और सामग्री में फ़र्क करना पड़ता है। कोटिंग के नियम मानें, विभाजक चिह्न और हेडर वाली पंक्ति जाँचें, और शून्य से शुरू होने वाली संख्याओं को टेक्स्ट के रूप में रखें। इस लेख के बाकी हिस्से में बताया गया है कि एक राउंड ट्रिप में क्या बचता है और क्या नहीं।
CSV से JSONCSV को JSON में चाहिए, या वापसमुफ़्त में करेंCSV फ़ाइल असल में क्या है
CSV का कोई एक आधिकारिक मानक नहीं है, लेकिन RFC 4180 इसका आम रूप बताता है, और ज़्यादातर रीडर उसी को मानते हैं। इसके मुख्य नियम एक छोटी सूची में आ जाते हैं:
- हर रिकॉर्ड अपनी अलग लाइन पर होता है, और RFC के अनुसार लाइन का अंत कैरिज रिटर्न और लाइन फ़ीड, यानी CRLF से होता है।
- फ़ील्ड कॉमा से अलग होते हैं।
- जिस फ़ील्ड में कॉमा, डबल कोट या नई लाइन हो, उसे डबल कोट में घेरा जाता है।
- घिरे हुए फ़ील्ड के अंदर डबल कोट को दो डबल कोट लिखकर दिखाया जाता है।
तो पंक्ति 1001,"Smith, Ann",02134 में तीन फ़ील्ड हैं, क्योंकि कोट के अंदर का कॉमा सामग्री का हिस्सा है। जो स्प्लिटर हर कॉमा पर काटता है, उसे चार फ़ील्ड मिलेंगे। fixmint का रीडर ये नियम लागू करता है: घिरा हुआ फ़ील्ड विभाजक चिह्न, नई लाइनें और दोहरे कोट रख सकता है, और बिना बंद हुए कोट को उस लाइन के साथ बताया जाता है जहाँ वह शुरू होता है।
विभाजक चिह्न क्यों बदलता है
कॉमा RFC का डिफ़ॉल्ट है, लेकिन जहाँ कॉमा दशमलव चिह्न होता है, यानी 1,5 का मतलब डेढ़ होता है, वहाँ स्प्रेडशीट अक्सर सेमीकोलन के साथ CSV सेव करती हैं। टैब से अलग की गई फ़ाइलें (TSV) ज़्यादातर डेटा में इस टकराव से बचती हैं, क्योंकि टैब टेक्स्ट के अंदर शायद ही कभी आते हैं।
विभाजक चिह्न मेनू में अपने-आप, कॉमा, सेमीकोलन, टैब और पाइप के विकल्प मिलते हैं। अपने-आप वाला विकल्प पहली दस लाइनें पढ़ता है, कोट के बाहर हर संभावित चिह्न गिनता है, और वह चुनता है जिसकी प्रति लाइन गिनती सबसे एकसमान हो। जब अपने-आप वाला अनुमान गलत निकले, तो विभाजक चिह्न खुद चुनें।
fixmint में बदलना
उदाहरण में CSV से JSON टूल के डिफ़ॉल्ट विकल्प इस्तेमाल हुए हैं।
उदाहरण
पहली पंक्ति हेडर है, इसे चिह्नित रखते हुए यह CSV चिपकाएँ:
id,name,zip,note
1001,"Smith, Ann",02134,"She said ""hi"""
1002,Bo,10001,"line one
line two"
"संख्याओं को बदलें" बंद रखकर और JSON इंडेंट 2 स्पेस पर सेट करके, टूल यह लौटाता है:
[
{
"id": "1001",
"name": "Smith, Ann",
"zip": "02134",
"note": "She said \"hi\""
},
{
"id": "1002",
"name": "Bo",
"zip": "10001",
"note": "line one\nline two"
}
]
"संख्याओं को बदलें" चालू होने पर id और zip में 10001 संख्या बन जाते हैं, और 02134 टेक्स्ट ही रहता है।
चरण
- CSV चिपकाएँ, या .csv, .tsv, .txt या .json फ़ाइल यहाँ खींचकर छोड़ें।
- जाँचें कि पहली पंक्ति हेडर है, और विभाजक चिह्न व संख्याओं को बदलने वाला विकल्प सही है। JSON इंडेंट 2 स्पेस, टैब या Minified चुनें।
- नतीजा कॉपी करें, या उसे .json के रूप में डाउनलोड करें।
संख्याएँ टेक्स्ट के रूप में रखें
JSON संख्याओं में शुरुआती शून्य नहीं हो सकते, इसलिए 02134 एक मान्य JSON संख्या नहीं है। ZIP कोड, फ़ोन नंबर और प्रोडक्ट कोड टेक्स्ट ही रहने चाहिए, नहीं तो शून्य गायब हो जाता है। "संख्याओं को बदलें" चालू होने पर टूल 10001 को संख्या में बदलता है, लेकिन 02134 को स्ट्रिंग के रूप में रखता है। यह विकल्प डिफ़ॉल्ट रूप से बंद होता है। यह केवल उन्हीं मानों को बदलता है जिनमें दशमलव बिंदु हो, इसलिए सेमीकोलन वाली फ़ाइल में 1,5 जैसा लिखा हुआ, जैसा है वैसा ही रहता है।
लंबे पहचानकर्ताओं (IDs) पर भी ध्यान देना होता है। JavaScript, जो ज़्यादातर ब्राउज़र में JSON चलाता है, संख्याएँ 64-बिट फ़्लोटिंग-पॉइंट मानों में रखता है। पूर्ण संख्याएँ 9,007,199,254,740,991 तक ही सटीक रहती हैं, जो दो की घात 53 माइनस 1 है। संख्या 12345678901234567890 को JavaScript प्रोग्राम पढ़ता है तो वह 12345678901234567000 बन जाती है। टूल अंकों को जैसा लिखा है वैसा ही लिखता है, लेकिन JavaScript में JSON पार्स करने वाला प्रोग्राम उन्हें राउंड कर देगा। ID को स्ट्रिंग के रूप में रखें। JSON फ़ॉर्मेटर भी ऐसी संख्याओं को जैसा लिखा है वैसा ही रखता है, और बताता है कि उसने कितनी संख्याएँ सुरक्षित रखीं।
नेस्टेड JSON और वापस CSV में
CSV समतल होता है, जबकि JSON नेस्ट हो सकता है। JSON को CSV में बदलने पर सभी ऑब्जेक्ट की हर कुंजी के लिए एक कॉलम बनता है, उसी क्रम में जिसमें हर कुंजी पहली बार आती है। नेस्टेड ऑब्जेक्ट या सूची JSON टेक्स्ट के रूप में उसके सेल में जाती है, null खाली सेल बन जाता है, और true व false शब्दों में लिखे जाते हैं। पंक्तियाँ CRLF से जुड़ती हैं, और कोई फ़ील्ड कोट में केवल तब घिरता है जब उसमें विभाजक चिह्न, कोट, नई लाइन हो, या दोनों सिरों पर स्पेस हों।
[ या { से शुरू होने वाला इनपुट JSON के रूप में पढ़ा जाता है। चिप बटन दिशा बदलता है, जिस पर CSV → JSON या JSON → CSV लिखा होता है। JSON → CSV दिशा में आउटपुट विकल्पों में एक विभाजक चिह्न मेनू और For Excel विकल्प दिखते हैं।
राउंड ट्रिप में जानकारी खोती है। null और खाली स्ट्रिंग दोनों खाली सेल बन जाते हैं, और नेस्टिंग वापस नहीं आती, इसलिए अगर आपको उसका ढाँचा चाहिए तो मूल JSON सुरक्षित रखें।
Excel, UTF-8 और बाइट ऑर्डर मार्क
CSV फ़ाइल असल में बाइट्स होती है, और रीडर को एन्कोडिंग पता होनी चाहिए। UTF-8 में एक्सेंट वाले अक्षर और दूसरी भाषाओं की लिपियाँ आ सकती हैं। बाइट ऑर्डर मार्क, यानी फ़ाइल की शुरुआत के तीन बाइट, बताता है कि फ़ाइल UTF-8 है। उसके बिना कुछ स्प्रेडशीट प्रोग्राम फ़ाइल को स्थानीय कोड पेज में पढ़ते हैं, और एक्सेंट वाले अक्षर अजीब अक्षरों में बदल जाते हैं। CSV खोलते समय स्प्रेडशीट अक्सर 02134 को 2134 भी बना देती हैं।
For Excel विकल्प डाउनलोड की गई CSV में ही बाइट ऑर्डर मार्क जोड़ता है, कॉपी किए गए टेक्स्ट में कभी नहीं, और केवल JSON → CSV दिशा में। रीडर इनपुट से बाइट ऑर्डर मार्क हटा देता है, इसलिए जिस फ़ाइल में यह पहले से है, वह बिना गलती के बदल जाती है।
किनारे के मामले
- असमान पंक्तियाँ। हेडर चालू होने पर छोटी पंक्ति खाली मानों से भर दी जाती है, और लंबी पंक्ति के अतिरिक्त मान column_N के रूप में रहते हैं। नतीजा बताता है कि कितनी पंक्तियाँ हेडर से अलग हैं।
- दोहराए गए या खाली हेडर। दोहराए गए नाम को _2, _3 आदि मिलता है, और खाली नाम column_N बन जाता है। दोनों बदलाव दो कुंजियों को एक-दूसरे को मिटाने से रोकते हैं।
- घुमावदार कोट। वर्ड प्रोसेसर के स्मार्ट कोट CSV कोट नहीं हैं, इसलिए “Smith, Ann” जैसा फ़ील्ड अपने कॉमा पर बँट जाता है। पहले इन्हें पेस्ट किया टेक्स्ट ठीक करें से सीधा करें, या घुमावदार कोट गाइड में बताए तरीके से।
- कोट के अंदर नई लाइनें। दो लाइनों में फैला फ़ील्ड एक ही रिकॉर्ड है, लेकिन डुप्लिकेट लाइनें हटाएँ अपने इनपुट को हर नई लाइन पर बाँटता है, इसलिए वह दोनों हिस्सों को अलग-अलग पंक्तियाँ मान लेगा। JSON में बदलकर ऑब्जेक्ट की तुलना करें, या हाथ से जाँचें। यह टूल एक-लाइन-एक-मान वाली सूचियों के लिए उपयोगी रहता है।
- बड़ी फ़ाइलें। नतीजे वाले बॉक्स में पहले 100,000 अक्षर दिखते हैं, लेकिन कॉपी और डाउनलोड में पूरा आउटपुट शामिल होता है।
- अमान्य JSON। कनवर्टर त्रुटि की लाइन और कॉलम बताता है, और उस अक्षर के नीचे एक कैरेट दिखाता है। JSON फ़ॉर्मेटर आम गलतियाँ समझाता है, और JSON त्रुटियों की गाइड इन्हें विस्तार से बताती है।
फ़ील्ड के आसपास के अनचाहे स्पेस, फ़ाइल के बीच की खाली पंक्तियाँ और असंगत तरीके से इस्तेमाल हुए कोट विभाजक चिह्न की बात आने से पहले ही ज़्यादातर CSV समस्याएँ पैदा करते हैं। पहले CSV क्लीनर से CSV साफ़ करें, फिर बदलें।
अंग्रेज़ी मूल से AI की मदद से अनुवादित।
टिप्पणियाँ
अभी कोई टिप्पणी नहीं। पहली टिप्पणी आप करें।


