हिन्दी

डेवलपर टूल · सिंटेक्स कन्वर्टर्स

CSV से JSON और JSON से CSV: हेडर, स्ट्रिंग मान और फ़्लैटनिंग

· यह काम किस प्रकार करता है

json CAसवी डेटा-प्रारूप

एक घोंसला वाला JSON पेड़ बिंदीदार CSV कॉलम में एक तरफ चपटा हो रहा है
मूल ToolAcre वेक्टर चित्रण

CSV अपने स्वयं के सीमांकक के बारे में सपाट, टाइपहीन और अस्पष्ट है, जबकि JSON नेस्टेड और टाइप किया गया है। यह पोस्ट दिखाती है कि कैसे एक कन्वर्टर पंक्तियों को वस्तुओं और पीछे की ओर मैप करता है, और प्रत्येक दिशा में जानकारी कहाँ खो जाती है।

प्रत्येक संख्या उद्धरण चिह्नों में वापस आ गई - CSV निर्यात JSON में परिवर्तित हो गया जहां 42 "42" बन गया और ZIP कोड ने एक बार के लिए अपना अग्रणी शून्य बनाए रखा

कार्यपुस्तिका CSV-to-JSON उदाहरण मांगती है, लेकिन ToolAcre कभी भी CSV नहीं पढ़ता है। इंजन ठीक नौ निर्देशित जोड़ियों का विज्ञापन करता है, और कोई भी CSV से शुरू नहीं होता है। किसी फ़ाइल को पढ़ने के लिए सीमांकक, उद्धरण, शीर्षलेख उपस्थिति और सेल प्रकारों के बारे में विकल्पों की आवश्यकता होगी; यह पैनल चार मूक अनुमान लगाने से इंकार करता है। इसलिए संशोधित लेख भेजे गए JSON-to-CSV दिशा का दस्तावेजीकरण करता है।

वह एकतरफा निर्णय इंटरफ़ेस और त्रुटियों दोनों में दिखाई देता है। CSV एक लक्ष्य के रूप में प्रकट होता है, स्रोत के रूप में नहीं, और विपरीत प्रयास करने पर एक टूल का उपयोग करने की सलाह के साथ `UNSUPPORTED_CONVERSION` वापस आता है जो बोली और प्रकारों के बारे में पूछता है। दोनों दिशाओं का सुझाव देने वाला शीर्षक उत्पाद को गलत तरीके से प्रस्तुत करेगा, भले ही सामान्य विषय अन्यत्र सामान्य हो।

CSV यहां नहीं पढ़ा गया है: JSON-से-CSV पथ से शुरू करें जो टूल वास्तव में शिप करता है

एक रूट JSON सरणी पंक्तियों की आपूर्ति करती है। एक सादा वस्तु एक पंक्ति बन जाती है। एक वस्तु जिसकी एकमात्र कुंजी एक सरणी रखती है, उस सरणी को खोल देती है और चेतावनी देती है कि उसने नामित संपत्ति का उपयोग किया है। अतिरिक्त सहोदर कुंजियों वाली वस्तुएं खुलती नहीं हैं, क्योंकि ऐसा करने से वे सहोदर कुंजियां छूट जाएंगी या उनकी नकल हो जाएंगी।

कॉलम एकत्र करने से पहले प्रत्येक चयनित रिकॉर्ड को समतल किया जाता है। रिकॉर्ड किसी सरणी के अंदर अदिश राशि के भी हो सकते हैं; वे `value` कॉलम का उपयोग करते हैं। दस्तावेज़ रूट पर एक नंगे स्केलर को अस्वीकार कर दिया गया है क्योंकि एक स्ट्रिंग या संख्या रिकॉर्ड और फ़ील्ड वाली तालिका को परिभाषित नहीं करती है।

JSON से रिकॉर्ड चुनना: सरणी, एकल ऑब्जेक्ट और एक-कुंजी सरणी रैपर

JSON प्रकार केवल सेल टेक्स्ट के रूप में जीवित रहते हैं। बूलियन `true` और `false` बन जाते हैं, संख्याएँ अपने दशमलव प्रतिपादन का उपयोग करती हैं, और शून्य एक खाली सेल बन जाता है। CSV उस शून्य को खाली स्ट्रिंग से अलग नहीं कर सकता है, इसलिए लेखक शून्य को गिनता है और परिणाम को समतुल्य कहने के बजाय अस्पष्टता के बारे में चेतावनी देता है।

विस्तृत पूर्णांक इस चरण से पहले ही JSON पार्सिंग के अधीन हैं, इसलिए एक असुरक्षित संख्यात्मक शाब्दिक सटीकता खो सकती है। उद्धरण चिह्नों में एक पहचानकर्ता डालने से उसका पाठ सुरक्षित रहता है। जब फॉर्मूला-जैसी स्ट्रिंग्स `=`, `+`, `-`, `@`, टैब या कैरिज रिटर्न से शुरू होती हैं तो उन्हें डिफ़ॉल्ट रूप से एक अतिरिक्त एपोस्ट्रोफ प्राप्त होता है; वास्तविक संख्यात्मक `-5` एक संख्या बनी रहती है और उसके पहले कोई उपसर्ग नहीं लगाया जाता है।

CSV आउटपुट JSON प्रकारों को संरक्षित क्यों नहीं कर सकता

कॉलम प्रथम-देखे क्रम में चपटी कुंजियों का संघ हैं। यदि एक पंक्ति में `a` है और दूसरे में `b` है, तो आउटपुट में कॉलम और पैड दोनों हैं, प्रत्येक गायब फ़ील्ड में एक खाली सेल है। एक चेतावनी गलत हेडर के अंतर्गत मानों को स्थानांतरित करने के बजाय पंक्तियों में गड़बड़ी की रिपोर्ट करती है।

ऑब्जेक्ट कुंजियों को क्रमबद्ध करना CSV पर लागू नहीं होता है; लेखक का नियम अभिलेखों में पहली उपस्थिति है। यह एक निश्चित JSON इनपुट के लिए एक उदाहरण को स्थिर बनाता है, लेकिन यह एक स्कीमा अनुबंध नहीं है। जब डाउनस्ट्रीम आयात के लिए निर्धारित आदेश की आवश्यकता होती है तो स्रोत कुंजियों को जानबूझकर व्यवस्थित करें या हेडर को पोस्ट-प्रोसेस करें।

नेस्टेड डेटा को समतल करना - address.city जैसे डॉट पथ, अनुक्रमित कॉलम या जुड़े स्ट्रिंग के रूप में सरणी, और वह बिंदु जिस पर CSV बस आकार नहीं रख सकता है

नेस्टेड ऑब्जेक्ट कुंजियाँ एक बिंदु के साथ जुड़ती हैं: `address.city`। सारणियाँ समान विभाजक और संख्यात्मक सूचकांकों का उपयोग करती हैं: `tags.0`, `tags.1`। खाली वस्तुएँ और सरणियाँ गायब होने के बजाय एक खाली सेल को अपने पथ पर बनाए रखती हैं। यह स्वीकार करते हुए एक आयत बनाता है कि एक पेड़ को नामों में प्रक्षेपित किया गया है।

एक स्रोत कुंजी जिसमें पहले से ही एक बिंदु है वह नेस्टेड पथ के साथ अस्पष्ट है। ToolAcre पता लगाता है और चेतावनी देता है लेकिन ऐसे एस्केपिंग सिंटैक्स का आविष्कार नहीं करता है जिसे स्प्रेडशीट समझ नहीं पाएगी। गहरी या लंबी सारणियाँ 2,000-कॉलम कैप से भी अधिक हो सकती हैं, जहां रूपांतरण एक तालिका उत्सर्जित करने के बजाय अस्वीकार कर देता है जिसे सामान्य स्प्रेडशीट सॉफ़्टवेयर उपयोग नहीं कर सकता है।

व्यावहारिक उदाहरण: एक ग्राहक सूची दोनों तरीकों से - CSV से JSON, एक नेस्टेड फ़ील्ड को संपादित करना, और JSON को नेस्टिंग को समतल करके CSV पर वापस लाना

`[ {"id":"0042","address":{"city":"Oslo"},"tags":["new","west"],"note":"=1+1"}, {"id":"0043","address":{"city":"Lima"},"tags":[],"note":null} ]` का प्रयोग करें. हेडर में ID, address.city, tags.0, tags.1 और नोट शामिल हैं। दूसरी पंक्ति अनुपस्थित टैग सूचकांकों के लिए रिक्त स्थान प्राप्त करती है, और इसका शून्य नोट खाली पाठ से अप्रभेद्य है।

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

कार्यान्वित उदाहरण: एक नेस्टेड ग्राहक सरणी को एक बार CSV में समतल किया गया

विकृत या अस्पष्ट रूप से एन्कोड किया गया CSV इस मार्ग से बाहर है क्योंकि कोई CSV इसमें प्रवेश नहीं करता है। CSV क्लीनर बोली और मरम्मत उद्धरण को चुनने या पता लगाने का स्थान है। यहां स्रोत सख्त JSON है और आउटपुट प्रलेखित लेखक सम्मेलनों का पालन करता है।

कन्वर्टर आउटपुट को 100,000 पंक्तियों और 2,000 कॉलम पर भी कैप करता है। खाली सरणियों को अस्वीकार कर दिया जाता है क्योंकि न तो हेडर और न ही पंक्ति वाली फ़ाइल में कोई तालिका आकार नहीं होता है। वे सीमाएँ लागू कोड पथ हैं, प्रदर्शन वादे नहीं, और लेख थ्रूपुट आंकड़ों का आविष्कार नहीं करता है।

टेकवे: CSV एक तालिका है, JSON एक पेड़ है - और सिंटैक्स कन्वर्टर्स पैनल पंक्तियों को अपलोड किए बिना उनके बीच कैसे चलता है

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

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