الانتقال إلى المحتوى الرئيسي
الوحدة 8 · الدرس 1 من 429/36 في الدورة~10 min
دروس الوحدة (1/4)

JSON: إجراء تسلسل وتحليل

JSON هو تنسيق تبادل البيانات الأكثر انتشارًا. الوحدة json في تتعامل المكتبة القياسية معها محليًا.

من بايثون إلى JSON: dumps

json.dumps(object) يقوم بإجراء تسلسل لكائن Python في سلسلة 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 إلى Python: loads

json.loads(string) يوزع سلسلة JSON ويعيد كائنات Python.

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

نوع التعيين

جيسونبايثون
محمي_INLINE_11محمي_INLINE_12
محمي_INLINE_13محمي_INLINE_14
محمي_INLINE_15محمي_INLINE_16
محمي_INLINE_17محمي_INLINE_18 / محمي_INLINE_19
محمي_INLINE_20محمي_INLINE_21
محمي_INLINE_22محمي_INLINE_23
محمي_INLINE_24محمي_INLINE_25

من الملف: 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جارٍ التحميل…

بالنظر إلى `data = {'nome': 'Ada', 'anni': 36}`، قم بإجراء تسلسل لها إلى JSON مع المسافة البادئة = 2 وتعيينها للمتغير `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}'\`، قم بفك تشفيرها إلى قاموس Python باستخدام \`json.loads\`. قم باستخراج القيمة المرتبطة بالمفتاح \`'name'\` وقم بتخزينها في \`user_name\`. وأخيرًا، قم بتقييم \`user_name\`.

جارٍ تحميل المحرر…
إظهار التلميح

استخدم json.loads(json_data) لفك التشفير، ثم قم بالوصول عبر البيانات ['name'].

الحل متاح بعد 3 من المحاولات