JSON से CSV

JSON ऑब्जेक्ट की एक सरणी को RFC 4180 CSV में बदलें। नेस्टेड ऑब्जेक्ट को डॉटेड कॉलम में सपाट करता है, विरल रिकॉर्ड संभालता है, और कॉमा, सेमीकोलन, टैब या पाइप डिलिमिटर के साथ-साथ Excel BOM प्रदान करता है।

रिकॉर्ड को स्प्रेडशीट में सपाट करें। ऑब्जेक्ट की एक सरणी पेस्ट करें और CSV हेडर रो के साथ वापस पाएँ। नेस्टेड ऑब्जेक्ट डॉटेड कॉलम नाम बन जाते हैं, गायब फ़ील्ड खाली सेल बन जाते हैं, और डिलिमिटर वाले मान RFC 4180 के अनुसार कोट किए जाते हैं।

एक ट्री को टेबल में बदलना

आकार का असंतुलन

JSON एक ट्री है और CSV एक आयत है, इसलिए किसी भी रूपांतरण को यह तय करना होता है कि ट्री के उन हिस्सों के साथ क्या करना है जो फिट नहीं आते। वह एक आकार जो साफ़ मैप होता है वह सपाट ऑब्जेक्ट की एक सरणी है: हर ऑब्जेक्ट एक पंक्ति बन जाता है और हर कुंजी एक स्तंभ बन जाती है। बाकी सब कुछ के लिए एक नियम चाहिए।

नेस्टेड ऑब्जेक्ट आसान मामला है। {"role": {"team": "core"}} एक कॉलम role.team बन जाता है, जो मान को पता योग्य रखता है और अधिकांश स्प्रेडशीट आयात विज़ार्ड द्वारा समझा जाता है। नेस्टेड सरणियाँ कठिन हैं, क्योंकि उन्हें विस्तार करने से पंक्तियों की संख्या बदल जाएगी और आसपास का डेटा चुपचाप डुप्लिकेट हो जाएगा। यह कन्वर्टर उन्हें एकल सेल के अंदर JSON टेक्स्ट के रूप में रखता है, जिससे क्वेरी क्षमता तो चली जाती है लेकिन स्रोत में न मौजूद कोई रिकॉर्ड कभी नहीं बनाता।

विरल रिकॉर्ड और स्तंभ क्रम

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

यहाँ कॉलम सूची हर रिकॉर्ड में हर कुंजी का संघ है, पहले-देखे गए क्रम में। किसी फ़ील्ड वाला रिकॉर्ड जो गायब है उसे छोड़ने के बजाय एक खाली सेल मिलता है, इसलिए पंक्ति गणना हमेशा इनपुट लंबाई से मेल खाती है। पहले-देखे गए क्रम को वर्णानुक्रम के ऊपर चुना गया है क्योंकि यह लेखक के इच्छित समूहन को संरक्षित करता है — id और name बिखरने के बजाय आगे रहते हैं।

कोटिंग, डिलिमिटर और Excel

RFC 4180 आवश्यक करता है कि किसी फ़ील्ड को कोट किया जाए यदि वह डिलिमिटर, डबल कोट, या लाइन ब्रेक रखता हो, और एम्बेडेड कोट को उसे दोहराकर एस्केप किया जाता है। यह उपकरण वह नियम हर सेल पर लागू करता है, हेडर सहित, ताकि Grace, Jr. या मल्टी-लाइन पता जैसा मान किसी भी अनुपालनकारी पार्सर के माध्यम से राउंड ट्रिप बच जाए।

डिलिमिटर का चुनाव दिखने से अधिक मायने रखता है। उन क्षेत्रों में जहाँ कॉमा दशमलव पृथक्कारक है — महाद्वीपीय यूरोप का अधिकांश — Excel एक सेमीकोलन की अपेक्षा करता है और अन्यथा पूरी पंक्ति को स्तंभ A में डाल देता है। BOM विकल्प एक UTF-8 बाइट ऑर्डर मार्क प्रीपेंड करता है, जो Windows पर Excel को फ़ाइल को लेगेसी कोड पेज के बजाय UTF-8 के रूप में पढ़ने के लिए बताता है; उसके बिना, गैर-ASCII नाम बिगड़े हुए आते हैं। दोनों विकल्प डिफ़ॉल्ट पथ से बाहर हैं बिल्कुल इसलिए क्योंकि वे अन्य उपकरणों को तोड़ते हैं, इसलिए उन्हें केवल Excel के लिए चालू करें।

ओपन-सोर्स सूचना: वैनिला JavaScript में किसी तृतीय-पक्ष लाइब्रेरी के बिना कार्यान्वित।

अक्सर पूछे जाने वाले प्रश्न

यह किस इनपुट आकार की अपेक्षा करता है?
ऑब्जेक्ट की एक सरणी, जहाँ हर ऑब्जेक्ट एक पंक्ति है। एकल ऑब्जेक्ट स्वीकार किया जाता है और एक पंक्ति उत्पन्न करता है, लेकिन स्ट्रिंग या संख्या की सरणी टेबल नहीं बन सकती।
नेस्टेड ऑब्जेक्ट कैसे संभाले जाते हैं?
वे डॉटेड कॉलम नाम में सपाट किए जाते हैं, इसलिए {"role": {"team": "core"}} एक कॉलम role.team बन जाता है। उन्हें JSON टेक्स्ट के रूप में रखने के लिए सपाटीकरण बंद करें।
नेस्टेड सरणियाँ JSON के रूप में क्यों छोड़ी जाती हैं?
उन्हें विस्तार करने से पंक्ति गणना बदल जाएगी और आसपास के फ़ील्ड डुप्लिकेट होंगे। उन्हें एक सेल में रखने का अर्थ है कि आउटपुट में हमेशा ठीक उतनी ही पंक्तियाँ होती हैं जितनी इनपुट में रिकॉर्ड थे।
जब रिकॉर्ड में अलग-अलग कुंजियाँ होती हैं तो क्या होता है?
हेडर सभी रिकॉर्ड में सभी कुंजियों का संघ है, पहले-देखे गए क्रम में, और किसी फ़ील्ड वाला रिकॉर्ड जो गायब है उसे एक खाली सेल मिलती है। कोई रिकॉर्ड छोड़ा नहीं जाता।
मुझे BOM विकल्प का उपयोग कब करना चाहिए?
केवल Windows पर Excel के लिए। बाइट ऑर्डर मार्क उसे फ़ाइल को UTF-8 के रूप में पढ़ने के लिए बताता है; उसके बिना गैर-ASCII वर्ण गलत पढ़े जाते हैं। अन्य उपकरण BOM को भटके हुए वर्णों के रूप में दिखा सकते हैं।
मेरी फ़ाइल Excel में एक ही स्तंभ में क्यों खुल रही है?
Excel आपके क्षेत्र के सूची पृथक्कारक का पालन करता है। उन क्षेत्रों में जहाँ दशमलव चिह्न के रूप में कॉमा का उपयोग होता है, वह एक सेमीकोलन की अपेक्षा करता है, इसलिए डिलिमिटर को सेमीकोलन में बदलें और फिर से खोलें।