JSON से Excel: चार तरीके और हर एक कहाँ निष्ठा खोता है
मुख्य बात: Nested संरचनाएँ, असंगत फ़ील्ड और array के भीतर array — यहीं JSON से स्प्रेडशीट रूपांतरण टूटता है। चार तरीके, परिणाम मिलने के समय के क्रम में, हर एक के अपने समझौते।

सार: object का सपाट array या array को लिपेटता object ऑनलाइन टूल से सबसे तेज़ रूपांतरित होता है; जब डेटा हर सप्ताह ताज़ा हो तो Power Query, जब साफ़ करने को बहुत फ़ील्ड हों तो pandas, और Node स्क्रिप्ट केवल तब जब रूपांतरण को किसी पाइपलाइन में जुड़ना हो — पर nested डेटा या असंगत key छूने से पहले तय करें कि "एक पंक्ति" का क्या अर्थ है।
रूपांतरण स्वयं कठिन नहीं है; कठिन यह है कि बाद में पता चले कि संख्याएँ पाठ बन गईं और कई nesting स्तर एक में सिमट गए। तरीका चुनने से पहले डेटा संरचना पढ़ लें, तो आप एक रीवर्क बचा लेते हैं।
1. पहले पता करें कि आपके पास किस तरह का JSON है
फ़ाइल खोलें और सबसे बाहरी स्तर देखें:
| संरचना | आकार | रूपांतरण कठिनाई |
|---|---|---|
| Object का सपाट array | [{"a":1,"b":2},{...}] |
सबसे आसान — प्रति रिकॉर्ड एक पंक्ति |
| Array को लिपेटता object | {"data":[{...}],"total":100} |
आसान — data स्तर लें |
| Nested object | {"user":{"name":"x"}} |
मध्यम — तय करें flatten करना है या स्ट्रिंग में जोड़ना |
| Array के भीतर array | {"tags":["a","b"]} |
कष्टकर — एक पंक्ति में नहीं आता, तालिका बाँटनी होगी |
| असंगत key | हर रिकॉर्ड में अलग फ़ील्ड | कष्टकर — स्तंभ ज़्यादातर खाली रह जाते हैं |
पहले दो लगभग 100% सफलता दर के साथ सीधे रूपांतरित होते हैं; अंतिम तीन के लिए पहले तय करें कि "एक पंक्ति" का क्या अर्थ है, वरना बनी शीट बेकार होगी।
2. तरीका 1: ऑनलाइन टूल (1 मिनट)
JSON to table खोलें, डेटा चिपकाएँ → delimiter और header चुनें → CSV निर्यात करें → Excel में खोलें। कुछ दर्जन से कुछ हज़ार पंक्तियों तक के सुव्यवस्थित डेटा के लिए उपयुक्त।
तीन बातों का ध्यान रखें:
- आपको CSV मिलता है, xlsx नहीं। Excel CSV खोलते समय एन्कोडिंग का अनुमान सिस्टम locale से लगाता है, इसलिए चीनी पाठ गड़बड़ बन सकता है। "Data → From Text/CSV" से जाकर स्पष्ट रूप से UTF-8 चुनना अधिक भरोसेमंद है।
0से शुरू होने वाले पहचानकर्ता अपने शून्य खो देते हैं।"007"CSV में पाठ है, पर Excel उसे स्वतः संख्या 7 बना देता है। आयात के समय उस स्तंभ को पाठ पर सेट करें, या JSON में उसके आगे उपसर्ग जोड़ें।- लंबी संख्याएँ वैज्ञानिक संकेतन बन जाती हैं। 15 अंकों से लंबी राष्ट्रीय ID और ऑर्डर संख्याएँ परिशुद्धता खोती हैं; ऐसे फ़ील्ड JSON में पहले से स्ट्रिंग होने चाहिए, और आयात के बाद पाठ प्रारूप में ही रहने चाहिए।
3. तरीका 2: Excel का अंतर्निहित Power Query (दोबारा प्रयोग योग्य)
जब आपका डेटा हर सप्ताह ताज़ा होता है, तो Excel में अंतर्निहित Power Query इस्तेमाल करें: एक बार कॉन्फ़िगर करें, फिर बस "Refresh" क्लिक करें:
- "Data" → "Get Data" → "From File" → "From JSON";
- फ़ाइल चुनने के बाद आप Power Query संपादक में पहुँचते हैं, जहाँ
List/Recordसंरचनाएँ दिखती हैं; - स्तंभ हेडर के दाईं ओर expand आइकन पर क्लिक करके nested फ़ील्ड स्तर-दर-स्तर खोलें;
- जब स्तंभ नाम और प्रकार ठीक लगें, "Close & Load" करें।
फ़ायदा यह है कि nesting को परत-दर-परत कई स्तंभों में खोला जा सकता है, और प्रकार हाथ से दिए जा सकते हैं; कीमत यह है कि पहली बार सेटअप में List और Record का अंतर समझना पड़ता है — List array है, Record object है, और वे अलग दिशाओं में खुलते हैं।
4. तरीका 3: Python + pandas (बहुत फ़ील्ड, सफ़ाई चाहिए)
import pandas as pd
# Object wrapping an array: first reach the list level
rows = pd.read_json('data.json')['data']
# Expand nested fields into multiple columns
frame = pd.json_normalize(rows, sep='_')
frame.to_excel('out.xlsx', index=False)
json_normalize का मुख्य पैरामीटर sep है, जो nested फ़ील्ड खोलने के बाद स्तंभ-नामकरण शैली तय करता है; Excel में user_name इस्तेमाल करना user.name से आसान है। Array के भीतर array (tags जैसे) के लिए अतिरिक्त explode चरण चाहिए:
frame = frame.explode('tags')
यह चरण एक पंक्ति को कई में बाँटता है, one-to-many संबंध बचाने का एकमात्र तरीका — कीमत यह कि बाकी फ़ील्ड दोहराए जाते हैं।
5. तरीका 4: Node स्क्रिप्ट (जब पाइपलाइन में जुड़ना ही हो)
import { readFileSync, writeFileSync } from 'node:fs';
const rows = JSON.parse(readFileSync('data.json', 'utf8'));
const headers = [...new Set(rows.flatMap((row) => Object.keys(row)))];
const escapeCell = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
const lines = [
headers.join(','),
...rows.map((row) => headers.map((key) => escapeCell(row[key])).join(',')),
];
writeFileSync('out.csv', '\uFEFF' + lines.join('\n'), 'utf8');
दो विवरण न छोड़ें: शुरुआत में \uFEFF (BOM) लिखें ताकि Excel UTF-8 पहचाने, और सेल के भीतर दोहरे उद्धरण को "" के रूप में escape करें, वरना स्तंभ खिसक जाते हैं।
6. रूपांतरण हमेशा तीन चीज़ें खोता है
| खोई चीज़ | लक्षण | उपाय |
|---|---|---|
| प्रकार की जानकारी | संख्याएँ और boolean पाठ या TRUE/FALSE बन जाते हैं |
आयात के बाद स्तंभ प्रकार हाथ से सेट करें, या Power Query में बताएँ |
| Nesting स्तर | गहरे फ़ील्ड [object Object] में सिमट जाते हैं |
json_normalize इस्तेमाल करें या स्तर-दर-स्तर खोलें — कभी String(obj) नहीं |
| One-to-many संबंध | Array एक ही सेल में ठूँस दिए जाते हैं | explode से पंक्तियाँ बाँटें, या अलग संबंधित तालिका बनाएँ |
साथ ही, null और "फ़ील्ड अनुपस्थित" शीट में एक जैसे दिखते हैं (दोनों खाली सेल) पर व्यवसाय के संदर्भ में अलग अर्थ रखते हैं। जब इन्हें अलग पहचानना हो, तो JSON में null को स्पष्ट रूप से स्ट्रिंग "null" में बदलें, या _has_field मार्कर स्तंभ जोड़ें।
7. बाद में सत्यापन: केवल पहली पंक्ति न देखें
रूपांतरण के बाद कम से कम तीन चीज़ें नमूने के रूप में जाँचें:
- रिकॉर्ड संख्या: CSV पंक्तियों की संख्या array की लंबाई + 1 (header) के बराबर होनी चाहिए; पंक्ति गायब होने का अर्थ आमतौर पर अंतिम newline निगल लिया गया;
- सबसे अधिक null दर वाला स्तंभ: बहुत खाली सेल असंगत key नाम दर्शाते हैं — लौटकर जाँचें कि मूल JSON दो वर्तनी (
userIdऔरuser_id) इस्तेमाल कर रहा है या नहीं; - सबसे लंबी पंक्ति: nested array आमतौर पर वहीं पहुँचते हैं; पुष्टि करें कि कुछ कटा नहीं।
जब उल्टा काम चाहिए (Excel/CSV से वापस JSON), तो CSV to JSON इस्तेमाल करें, और याद रखें कि header को key नाम माना जाता है — header बदलना फ़ील्ड नाम बदलना है।
अक्सर पूछे जाने वाले प्रश्न
ऑनलाइन टूल, Power Query और pandas में से क्या चुनूँ?
एक बार रूपांतरित होने वाले कुछ दर्जन से कुछ हज़ार पंक्तियों के सुव्यवस्थित डेटा के लिए ऑनलाइन टूल इस्तेमाल करें। जब डेटा हर सप्ताह ताज़ा हो तो Power Query, क्योंकि वह एक बार कॉन्फ़िगर होकर एक क्लिक से refresh होता है। जब साफ़ करने को बहुत फ़ील्ड हों तो json_normalize के साथ pandas, और जब रूपांतरण को पाइपलाइन में जुड़ना हो तो Node स्क्रिप्ट।
CSV में चीनी पाठ गड़बड़ क्यों बन जाता है?
निर्यात CSV है, xlsx नहीं, और Excel एन्कोडिंग का अनुमान सिस्टम locale से लगाता है, इसलिए बिना BOM की UTF-8 गड़बड़ दिखाती है। फ़ाइल की शुरुआत में \uFEFF BOM लिखें, या उसे "Data → From Text/CSV" से खोलकर स्पष्ट रूप से UTF-8 चुनें।
Nested object को flatten करना चाहिए या अतिरिक्त पंक्तियों में बाँटना?
उन्हें स्तर-दर-स्तर flatten करें, स्ट्रिंग के रूप में चिपकाकर नहीं: Power Query nested फ़ील्ड को स्तंभों में खोलता है, और sep के साथ json_normalize pandas में वही करता है। Array के भीतर array के लिए अतिरिक्त explode चरण चाहिए जो एक पंक्ति को कई में बाँटता है। गहरे object को String(obj) में देने से केवल [object Object] मिलता है।