Python for AI/Errors ও Files/Lesson 30
JSON
Dictionary আর list file-এ save করা আর ফেরত পড়া — json.dump/load, বাংলার জন্য ensure_ascii=False, কোন type যায় আর কোনটা যায় না, আর config file-এর pattern।
- সময়
- 20 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
আগের lesson-এ file-এ text লিখেছি। কিন্তু একটা dictionary text-এ লিখে আবার ফেরত dictionary পাওয়া কঠিন। JSON (JavaScript Object Notation) হলো এর standard সমাধান — structured data text হিসেবে লেখার একটা ভাষা, যেটা প্রায় সব programming language বোঝে।
কেন দরকার?
- Config file — model-এর setting, hyperparameter।
- API — প্রায় সব web API (Claude API সহ) JSON পাঠায় আর নেয়।
- Experiment result — accuracy, loss, সময় — save করে পরে তুলনা।
- Dataset — অনেক NLP dataset JSON বা JSON Lines (
.jsonl) format-এ।
Python ↔ JSON
| Python | JSON |
|---|---|
dict | object {} |
list, tuple | array [] |
str | string |
int, float | number |
True / False | true / false |
None | null |
খেয়াল করো: tuple (3, 4) ফেরত এসেছে list [3, 4] হয়ে। আর JSON-এ true/null, Python-এ True/None।
চারটা function
| file | string | |
|---|---|---|
| Python → JSON | json.dump(obj, f) | json.dumps(obj) |
| JSON → Python | json.load(f) | json.loads(text) |
মনে রাখার উপায়: শেষে s মানে string।
বাংলা আর ensure_ascii=False
Default-এ JSON সব non-English অক্ষর ভ-এর মতো code-এ লেখে — ঠিক আছে, কিন্তু মানুষের পক্ষে পড়া অসম্ভব। ensure_ascii=False দিলে আসল বাংলা থাকে। (তখন file খোলার সময় encoding="utf-8" দিতেই হবে।)
যা JSON-এ যায় না
সমাধান — আগে রূপান্তর করো:
JSON Lines: বড় dataset-এর জন্য
একটা বিশাল JSON array একবারে memory-তে load করতে হয়। JSON Lines-এ প্রতিটা লাইন একটা আলাদা JSON object — লাইন ধরে ধরে পড়া যায়:
OpenAI আর Anthropic-এর fine-tuning ও batch API data নেয় ঠিক এই .jsonl format-এ।
Exercise
Exercise
Config save আর load
দুটো function লেখো:
save_config(path, config)— dictionary-টা JSON file-এ save করবে,indent=2দিয়ে, আর বাংলা যেনব-এর মতো না হয়ে আসল অক্ষরে থাকেload_config(path)— JSON file পড়ে dictionary return করবে
Quiz
Challenge
Challenge
Default-এর সাথে config মেলানো
load_with_defaults(path, defaults) function লেখো:
- File না থাকলে →
defaults-এর একটা copy return করবে - File থাকলে → defaults-এর ওপর file-এর মান বসাবে। Nested dictionary হলে ভেতরেও মেলাবে (পুরোটা বদলে দেবে না)
যেমন defaults {"train": {"lr": 0.001, "epochs": 10}} আর file-এ {"train": {"epochs": 3}} → ফলাফল {"train": {"lr": 0.001, "epochs": 3}}।
defaults dictionary নিজে কখনো বদলাবে না।
বাস্তবে কোথায় ব্যবহার হয়?
Experiment-এর ফলাফল save করা, যাতে পরে সব run তুলনা করা যায়:
MLflow, Weights & Biases-এর মতো tool ভেতরে ভেতরে এরকম JSON-ই লেখে — আর সুন্দর dashboard-এ দেখায়।
Interview প্রশ্ন
- Beginner: JSON কী? Python dictionary আর JSON-এর পার্থক্য কী?
- Intermediate: একটা custom class-এর object JSON-এ কীভাবে save করবে? (
default=parameter, বা আগেasdict()।) - Advanced: ১০ লাখ record-এর dataset-এর জন্য JSON বনাম JSON Lines বনাম Parquet — কখন কোনটা?
এরপর কী?
Tabular data — row আর column — এর জন্য সবচেয়ে common format হলো CSV। Excel, Google Sheets, Kaggle — সবখানে। পরের lesson-এ সেটা।