JSON Toolkit

JSON থেকে Excel: চারটি পদ্ধতি ও প্রতিটি কোথায় নির্ভুলতা হারায়

সংক্ষেপে: নেস্টেড কাঠামো, অসামঞ্জস্যপূর্ণ ফিল্ড আর অ্যারের অ্যারে — এখানেই JSON-থেকে-স্প্রেডশিট রূপান্তর ভাঙে। ফলাফল পাওয়ার সময় অনুযায়ী সাজানো চারটি পদ্ধতি, প্রতিটির সমঝোতাসহ।

শিক্ষানবিশ~11 মিনিট পড়াপ্রকাশ 2026-10-30আপডেট 2026-10-30
JSON থেকে Excel ব্যবহারিক নির্দেশিকার কভার

মূল কথা: সমতল অবজেক্টের অ্যারে বা অ্যারে মোড়া অবজেক্ট অনলাইন টুল দিয়ে দ্রুততম; ডেটা সপ্তাহে একবার রিফ্রেশ হলে Power Query, পরিষ্কার করার অনেক ফিল্ড থাকলে pandas, আর রূপান্তর পাইপলাইনে জুড়তে হলে কেবল Node স্ক্রিপ্ট — তবে নেস্টেড ডেটা বা অসামঞ্জস্যপূর্ণ কি-এ হাত দেওয়ার আগে ঠিক করুন "এক সারি" মানে কী।

রূপান্তর নিজে কঠিন নয়; কঠিন হলো পরে আবিষ্কার করা যে সংখ্যা টেক্সট হয়ে গেছে আর কয়েকটি নেস্টিং স্তর একটি হয়ে চুপসে গেছে। পদ্ধতি বাছাইয়ের আগে ডেটার কাঠামো পড়লে এক রাউন্ড পুনর্কাজ বাঁচে।

১. আগে বুঝুন আপনার কোন ধরনের JSON আছে

ফাইল খুলে সবচেয়ে বাইরের স্তরটি দেখুন:

কাঠামো আকৃতি রূপান্তরের কঠিনতা
সমতল অবজেক্টের অ্যারে [{"a":1,"b":2},{...}] সবচেয়ে সহজ — প্রতি রেকর্ডে এক সারি
অ্যারে মোড়া অবজেক্ট {"data":[{...}],"total":100} সহজ — data স্তরটি নিন
নেস্টেড অবজেক্ট {"user":{"name":"x"}} মাঝারি — ফ্ল্যাট করবেন নাকি স্ট্রিংয়ে জুড়বেন ঠিক করুন
অ্যারের অ্যারে {"tags":["a","b"]} কষ্টকর — এক সারিতে ধরে না, টেবিল ভাগ করা দরকার
অসামঞ্জস্যপূর্ণ কি প্রতি রেকর্ডে আলাদা ফিল্ড কষ্টকর — কলামগুলো প্রায় খালি থেকে যায়

প্রথম দুটি প্রায় ১০০% সফলতার হারে সরাসরি রূপান্তর হয়; শেষ তিনটির ক্ষেত্রে আগে ঠিক করুন "এক সারি" মানে কী, নাহলে ফলাফল শিট অব্যবহার্য।

২. পদ্ধতি ১: অনলাইন টুল (১ মিনিট)

JSON থেকে টেবিল খুলুন, ডেটা পেস্ট করুন → ডিলিমিটার ও হেডার বেছে নিন → CSV এক্সপোর্ট করুন → Excel-এ খুলুন। কয়েক ডজন থেকে কয়েক হাজার সারির সুগঠিত ডেটার জন্য উপযুক্ত।

তিনটি বিষয়ে অবশ্যই খেয়াল রাখুন:

  • পাবেন CSV, xlsx নয়। Excel CSV খোলার সময় সিস্টেম লোকেল থেকে এনকোডিং অনুমান করে, তাই চীনা লেখা এলোমেলো হতে পারে। "Data → From Text/CSV" ব্যবহার করে স্পষ্টভাবে UTF-8 বেছে নেওয়া বেশি নির্ভরযোগ্য।
  • 0 দিয়ে শুরু হওয়া আইডেন্টিফায়ার শূন্য হারায়। CSV-তে "007" টেক্সট, কিন্তু Excel স্বয়ংক্রিয়ভাবে সংখ্যা ৭ বানিয়ে দেয়। ইমপোর্টের সময় কলামটি টেক্সট করুন, বা JSON-এ এর আগে প্রিফিক্স যোগ করুন।
  • লম্বা সংখ্যা সায়েন্টিফিক নোটেশন হয়। ১৫ অঙ্কের বেশি জাতীয় পরিচয়পত্র ও অর্ডার নম্বর নির্ভুলতা হারায়; এমন ফিল্ড JSON-এ ইতিমধ্যে স্ট্রিং হওয়া উচিত, আর ইমপোর্টের পরও টেক্সট ফরম্যাটে থাকতে হবে।

৩. পদ্ধতি ২: Excel-এর অন্তর্নির্মিত Power Query (পুনর্ব্যবহারযোগ্য)

ডেটা প্রতি সপ্তাহে রিফ্রেশ হলে Excel-এ থাকা Power Query ব্যবহার করুন: একবার কনফিগার করে "Refresh" চাপলেই হবে:

  1. "Data" → "Get Data" → "From File" → "From JSON";
  2. ফাইল বেছে নিলে Power Query এডিটরে যাবেন, যেখানে List / Record কাঠামো দেখবেন;
  3. নেস্টেড ফিল্ড স্তরে স্তরে খুলতে কলাম হেডারের ডানে expand আইকনে ক্লিক করুন;
  4. কলামের নাম ও টাইপ ঠিক লাগলে "Close & Load"।

সুবিধা হলো নেস্টিং স্তরে স্তরে একাধিক কলামে খোলা যায়, আর টাইপ হাতে বসানো যায়; মূল্য হলো প্রথম সেটআপে List ও Record-এর পার্থক্য বুঝতে হয় — List অ্যারে, Record অবজেক্ট, আর তারা ভিন্ন দিকে খোলে।

৪. পদ্ধতি ৩: Python + pandas (অনেক ফিল্ড, পরিষ্কার দরকার)

import pandas as pd

# অ্যারে মোড়া অবজেক্ট: আগে লিস্ট স্তরে পৌঁছান
rows = pd.read_json('data.json')['data']

# নেস্টেড ফিল্ড একাধিক কলামে খুলুন
frame = pd.json_normalize(rows, sep='_')

frame.to_excel('out.xlsx', index=False)

json_normalize-এর মূল প্যারামিটার sep, যা নেস্টেড ফিল্ড খোলার পর কলাম-নামের ধরন ঠিক করে; Excel-এ user_name ব্যবহার user.name-এর চেয়ে সহজ। অ্যারের অ্যারে (যেমন tags) আরেকটি explode ধাপ দরকার:

frame = frame.explode('tags')

এই ধাপ একটি সারিকে কয়েকটি করে, এক-থেকে-অনেক সম্পর্ক সংরক্ষণের একমাত্র উপায় — বাকি ফিল্ড পুনরাবৃত্তির মূল্যে।

৫. পদ্ধতি ৪: 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 চেনে, আর সেলের ভেতরের ডাবল কোট "" হিসেবে এস্কেপ করুন, নাহলে কলাম সরে যায়।

৬. রূপান্তরে যা সবসময় হারায়

হারানো বিষয় লক্ষণ প্রতিকার
টাইপ তথ্য সংখ্যা ও বুলিয়ান টেক্সট বা TRUE/FALSE হয় ইমপোর্টের পর কলামের টাইপ হাতে বসান, বা Power Query-তে নির্দিষ্ট করুন
নেস্টিং স্তর গভীর ফিল্ড [object Object]-এ চুপসে যায় json_normalize ব্যবহার করুন বা স্তরে স্তরে খুলুন — কখনো String(obj) নয়
এক-থেকে-অনেক সম্পর্ক অ্যারে একটি সেলে ঠুসে যায় explode দিয়ে সারি ভাগ করুন, বা আলাদা সংশ্লিষ্ট টেবিল বানান

এছাড়া শিটে null ও "ফিল্ড অনুপস্থিত" একই দেখায় (দুটোই খালি সেল) কিন্তু ব্যবসায়িক অর্থ আলাদা। আলাদা করতে হলে JSON-এ null-কে স্পষ্টভাবে "null" স্ট্রিং করুন, বা _has_field মার্কার কলাম যোগ করুন।

৭. পরে যাচাই: শুধু প্রথম সারি দেখবেন না

রূপান্তরের পর অন্তত তিনটি বিষয় স্পট-চেক করুন:

  1. রেকর্ডের সংখ্যা: CSV লাইনের সংখ্যা অ্যারের দৈর্ঘ্য + ১ (হেডার)-এর সমান হওয়া উচিত; লাইন কম মানে সাধারণত শেষ নিউলাইন গিলে ফেলা হয়েছে;
  2. সর্বোচ্চ null-হারের কলাম: অনেক খালি সেল মানে কি-নাম অসামঞ্জস্যপূর্ণ — ফিরে গিয়ে দেখুন মূল JSON-এ দুই বানান (userId ও user_id) আছে কি না;
  3. সবচেয়ে লম্বা সারি: নেস্টেড অ্যারে সাধারণত সেখানেই পড়ে; কিছু কাটা পড়েনি নিশ্চিত করুন।

উল্টো কাজ (Excel/CSV থেকে JSON) দরকার হলে CSV থেকে JSON ব্যবহার করুন, আর মনে রাখুন হেডারকে কি-নাম ধরা হয় — হেডার বদলানো মানে ফিল্ডের নাম বদলানো।

সাধারণ প্রশ্ন

অনলাইন টুল, Power Query আর pandas-এর মধ্যে কীভাবে বেছে নেব?

একবার রূপান্তর করবেন এমন কয়েক ডজন থেকে কয়েক হাজার সারির সুগঠিত ডেটায় অনলাইন টুল ব্যবহার করুন। ডেটা প্রতি সপ্তাহে রিফ্রেশ হলে Power Query, কারণ একবার কনফিগার করে এক ক্লিকে রিফ্রেশ করা যায়। পরিষ্কার করার অনেক ফিল্ড থাকলে json_normalize সহ pandas, আর রূপান্তর পাইপলাইনে জুড়তে হলে Node স্ক্রিপ্ট।

CSV-তে চীনা লেখা এলোমেলো হয় কেন?

এক্সপোর্ট CSV, xlsx নয়, আর Excel সিস্টেম লোকেল থেকে এনকোডিং অনুমান করে, তাই BOM ছাড়া UTF-8 এলোমেলো দেখায়। ফাইলের শুরুতে \uFEFF BOM লিখুন, বা "Data → From Text/CSV" দিয়ে খুলে স্পষ্টভাবে UTF-8 বেছে নিন।

নেস্টেড অবজেক্ট ফ্ল্যাট করব নাকি বাড়তি সারিতে ভাগ করব?

স্ট্রিং হিসেবে পেস্ট না করে স্তরে স্তরে ফ্ল্যাট করুন: Power Query নেস্টেড ফিল্ড কলামে খোলে, আর pandas-এ sep সহ json_normalize একই কাজ করে। অ্যারের অ্যারেতে বাড়তি explode ধাপ দরকার যা এক সারিকে কয়েকটি করে। গভীর অবজেক্ট String(obj)-কে দিলে কেবল [object Object] পাওয়া যায়।