মূল content-এ যাও

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 বোঝে।

main.py

কেন দরকার?

  • 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

PythonJSON
dictobject {}
list, tuplearray []
strstring
int, floatnumber
True / Falsetrue / false
Nonenull
main.py

খেয়াল করো: tuple (3, 4) ফেরত এসেছে list [3, 4] হয়ে। আর JSON-এ true/null, Python-এ True/None।

চারটা function

filestring
Python → JSONjson.dump(obj, f)json.dumps(obj)
JSON → Pythonjson.load(f)json.loads(text)

মনে রাখার উপায়: শেষে s মানে string।

বাংলা আর ensure_ascii=False

main.py

Default-এ JSON সব non-English অক্ষর ভ-এর মতো code-এ লেখে — ঠিক আছে, কিন্তু মানুষের পক্ষে পড়া অসম্ভব। ensure_ascii=False দিলে আসল বাংলা থাকে। (তখন file খোলার সময় encoding="utf-8" দিতেই হবে।)

যা JSON-এ যায় না

main.py

সমাধান — আগে রূপান্তর করো:

main.py

JSON Lines: বড় dataset-এর জন্য

একটা বিশাল JSON array একবারে memory-তে load করতে হয়। JSON Lines-এ প্রতিটা লাইন একটা আলাদা JSON object — লাইন ধরে ধরে পড়া যায়:

main.py

OpenAI আর Anthropic-এর fine-tuning ও batch API data নেয় ঠিক এই .jsonl format-এ।

Exercise

Exercise

Config save আর load

+20 XP

দুটো function লেখো:

  • save_config(path, config) — dictionary-টা JSON file-এ save করবে, indent=2 দিয়ে, আর বাংলা যেন ব-এর মতো না হয়ে আসল অক্ষরে থাকে
  • load_config(path) — JSON file পড়ে dictionary return করবে
solution.py

Quiz

  1. Q1json.dump আর json.dumps-এর পার্থক্য কী?
  2. Q2Python-এর tuple (1, 2) JSON-এ save করে আবার load করলে কী পাবে?
  3. Q3কোনটা সরাসরি JSON-এ save করা যায় না?
0/3 answered

Challenge

Challenge

Default-এর সাথে config মেলানো

+50 XP

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 নিজে কখনো বদলাবে না।

solution.py

বাস্তবে কোথায় ব্যবহার হয়?

Experiment-এর ফলাফল save করা, যাতে পরে সব run তুলনা করা যায়:

main.py

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-এ সেটা।