دروس الوحدة (1/4)
JSON: إجراء تسلسل وتحليل
JSON هو تنسيق تبادل البيانات الأكثر انتشارًا. الوحدة json في
تتعامل المكتبة القياسية معها محليًا.
من بايثون إلى JSON: dumps
json.dumps(object) يقوم بإجراء تسلسل لكائن Python في سلسلة JSON.
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.
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
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، فئاتك المخصصة غير قابلة للتسلسل افتراضيًا:
import datetime, json
json.dumps({"ora": datetime.datetime.now()})
# TypeError: Object of type datetime is not JSON serializableيمكنك تمرير دالة default تخبرك بكيفية تحويلها:
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 وقراءتها مباشرة من وإلى الملفات، والاقتران بشكل طبيعي مع مديري السياق:
with open("data.json", "w") as f:
json.dump(data, f)جربه
بالنظر إلى `data = {'nome': 'Ada', 'anni': 36}`، قم بإجراء تسلسل لها إلى JSON مع المسافة البادئة = 2 وتعيينها للمتغير `json_str`. تقييم "json_str".
إظهار التلميح
json.dumps(البيانات، المسافة البادئة = 2)
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
بالنظر إلى سلسلة JSON s = '[{"nome": "a"، "v": 1}، {"nome": "b"، "v": 2}]'، قم بتحليلها باستخدام json.loads في البيانات واحسب مجموع قيم 'v' بشكل إجمالي. تقييم الإجمالي.
إظهار التلميح
يقوم json.loads بإرجاع قائمة الإملاءات.
الحل متاح بعد 3 من المحاولات
التحدي الإضافي
بالنظر إلى سلسلة JSON \`json_data = '{"name": "Alice"، "age": 30}'\`، قم بفك تشفيرها إلى قاموس Python باستخدام \`json.loads\`. قم باستخراج القيمة المرتبطة بالمفتاح \`'name'\` وقم بتخزينها في \`user_name\`. وأخيرًا، قم بتقييم \`user_name\`.
إظهار التلميح
استخدم json.loads(json_data) لفك التشفير، ثم قم بالوصول عبر البيانات ['name'].
الحل متاح بعد 3 من المحاولات