মূল কন্টেন্টে যান
মডিউল 8 · 1-এর পাঠ 4কোর্সে 29/36~10 min
মডিউল পাঠ (1/4)

JSON: সিরিয়ালাইজ এবং পার্স

JSON হল সবচেয়ে ব্যাপক ডেটা এক্সচেঞ্জ ফরম্যাট। json মডিউল স্ট্যান্ডার্ড লাইব্রেরি এটি স্থানীয়ভাবে পরিচালনা করে।

পাইথন থেকে JSON পর্যন্ত: dumps

json.dumps(object) একটি পাইথন বস্তুকে একটি JSON স্ট্রিং-এ সিরিয়ালাইজ করে।

Python
import json

dati = {"nome": "Ada", "anni": 36, "skills": ["python", "matematica"]}
json.dumps(dati)
# '{"nome": "Ada", "anni": 36, "skills": ["python", "matematica"]}'

json.dumps(dati, indent=2, sort_keys=True)
# multi-line formatted string, keys sorted

JSON থেকে পাইথনে: loads

json.loads(string) একটি JSON স্ট্রিং পার্স করে এবং পাইথন অবজেক্ট রিটার্ন করে।

Python
testo = '{"nome": "Ada", "anni": 36}'
d = json.loads(testo)
d["nome"]    # 'Ada'
type(d)      # <class 'dict'>

টাইপ ম্যাপিং

JSONপাইথন
objectdict
arraylist
stringstr
numberint / float
trueTrue
falseFalse
nullNone

ফাইল থেকে: dump / load

Python
with open("config.json", "w") as f:
    json.dump(dati, f, indent=2)

with open("config.json") as f:
    dati = json.load(f)

ট্র্যালিং "s" ছাড়াই তারা স্ট্রিংগুলিতে "s" সহ ফাইলগুলিতে (ফাইলের মতো) কাজ করে।

অ-ক্রমিক প্রকার: default

datetime, set, আপনার কাস্টম ক্লাসগুলি ডিফল্টরূপে ক্রমানুসারে যোগ্য নয়:

Python
import datetime, json
json.dumps({"ora": datetime.datetime.now()})
# TypeError: Object of type datetime is not JSON serializable

আপনি একটি default ফাংশন পাস করতে পারেন যা সেগুলিকে কীভাবে রূপান্তর করতে হয় তা বলে:

Python
def converti(obj):
    if isinstance(obj, datetime.datetime):
        return obj.isoformat()
    if isinstance(obj, set):
        return list(obj)
    raise TypeError(f"non serializzabile: {type(obj)}")

json.dumps({"ora": datetime.datetime.now()}, default=converti)

JSON এবং ফাইল অপারেশন

স্ট্যান্ডার্ড লাইব্রেরি json.dump() এবং json.load() ('s' ছাড়া) সরাসরি ফাইলে এবং থেকে JSON ডেটা লিখতে এবং পড়ার জন্য প্রদান করে, স্বাভাবিকভাবে প্রসঙ্গ পরিচালকদের সাথে যুক্ত করে:

Python
with open("data.json", "w") as f:
    json.dump(data, f)

চেষ্টা করে দেখুন

ব্যায়াম#python.m8.l1.e1
প্রচেষ্টা: 0লোড হচ্ছে...

`ডেটা = {'নোম': 'অ্যাডা', 'অ্যানি': 36}` দেওয়া, ইন্ডেন্ট=2 দিয়ে JSON-এ সিরিয়ালাইজ করুন এবং ভেরিয়েবল `json_str`-এ বরাদ্দ করুন। `json_str` মূল্যায়ন করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

json.dumps(ডেটা, ইন্ডেন্ট=2)

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#python.m8.l1.e2
প্রচেষ্টা: 0লোড হচ্ছে...

JSON স্ট্রিং s = '[{"nome": "a", "v": 1}, {"nome": "b", "v": 2}]' দেওয়া, এটিকে json.loads দিয়ে ডেটাতে পার্স করুন এবং মোট 'v' মানের সমষ্টি গণনা করুন। মোট মূল্যায়ন করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

json.loads নির্দেশাবলীর একটি তালিকা প্রদান করে।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

অতিরিক্ত চ্যালেঞ্জ

ব্যায়াম#python.m8.l1.e3
প্রচেষ্টা: 0লোড হচ্ছে...

JSON স্ট্রিং \`json_data = '{"name": "Alice", "age": 30}'\` দেওয়া, \`json.loads\` ব্যবহার করে এটিকে একটি পাইথন অভিধানে ডিকোড করুন। \`'নাম'\` কী এর সাথে যুক্ত মানটি বের করুন এবং এটিকে \`user_name\` এ সংরক্ষণ করুন। অবশেষে, \`user_name\` মূল্যায়ন করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ডিকোড করতে json.loads(json_data) ব্যবহার করুন, তারপর ডেটা['name'] এর মাধ্যমে অ্যাক্সেস করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ