Python: معالجة بيانات JSON
آخر تحديث: 2026-09-22
JSON (JavaScript Object Notation) هو تنسيق تبادل البيانات الأكثر شيوعاً على الويب. تقريباً جميع واجهات برمجة تطبيقات الويب تُرجع بيانات JSON. وحدة
jsonفي بايثون تجعل التحويل بين كائنات بايثون وسلاسل JSON سهلاً.
1. كائنات بايثون <-> سلاسل JSON
▶ مثال: التسلسل إلى سلسلة JSON
▶ جرّب الكودالناتج:
# Executed successfully
المخرجات:
{
"name": "Zhang San",
"age": 25,
"is_student": false,
"scores": [85, 92, 78],
"address": null
}
ensure_ascii=False مهم: بدون هذا المعامل، يتم هروب الأحرف غير ASCII إلى رموز Unicode. استخدمه للحفاظ على الأحرف الأصلية. indent=2 يُنسق الإخراج لسهولة القراءة. في الإنتاج، استخدم indent=None لضغطه في سطر واحد، لتوفير عرض النطاق الترددي.
2. سلسلة JSON -> كائنات بايثون (إلغاء التسلسل)
▶ مثال: إلغاء تسلسل سلسلة JSON
▶ جرّب الكودالناتج:
# Executed successfully
(1) تعيين نوع JSON إلى نوع بايثون
| JSON | بايثون |
|---|---|
string |
str |
number |
int / float |
boolean |
bool |
null |
None |
array |
list |
object |
dict |
3. إدخال/إخراج ملفات JSON
▶ مثال: قراءة وكتابة ملفات JSON
import json
# اكتب إلى ملف JSON
data = {
"students": [
{"name": "Zhang San", "age": 20, "score": 85},
{"name": "Li Si", "age": 21, "score": 92},
{"name": "Wang Wu", "age": 19, "score": 78}
]
}
with open("students.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# اقرأ ملف JSON
with open("students.json", "r", encoding="utf-8") as f:
loaded = json.load(f)
print(f"Number of students: {len(loaded['students'])}")
for s in loaded["students"]:
print(f" {s['name']}: {s['score']}")
▶ مثال: استمرارية البيانات (الصعوبة ⭐⭐)
▶ جرّب الكودالناتج:
No notes yet
4. التعامل مع أنواع البيانات المعقدة
افتراضياً، وحدة json تدعم فقط الأنواع الأساسية. الكائنات المخصصة تحتاج تحويلاً يدوياً:
▶ مثال: تسلسل مخصص
▶ جرّب الكودالناتج:
# Function defined successfully
5. حالات الاستخدام الشائعة
- بيانات واجهة برمجة تطبيقات الويب: أرسل واستقبل بيانات JSON عند استدعاء واجهات برمجة التطبيقات الخارجية.
- ملفات التهيئة: خزّن التهيئة بتنسيق JSON — أكثر مرونة من INI.
- استمرارية البيانات: احفظ بيانات البرنامج كملفات JSON — أكثر تنظيماً من CSV (يدعم التداخل).
- تبادل البيانات: انقل البيانات بين لغات وأنظمة مختلفة.
❓ أسئلة شائعة
json.dumps() و json.dump()؟dumps() تُرجع سلسلة JSON (s للـ string)؛ dump() تكتب مباشرة إلى كائن ملف. وبالمثل، loads() تحلل من سلسلة؛ load() تقرأ من كائن ملف. اللاحقة 's' تشير إلى سلسلة.ensure_ascii=False؟\uXXXX. وظيفة البرنامج غير متأثرة — json.loads() سيعيدها تلقائياً. لكن لسهولة القراءة البشرية، المحتوى المهروب غير قابل للقراءة تماماً. أضف ensure_ascii=False عندما تحتاج لعرض ملفات JSON يدوياً.📖 ملخص
json.dumps()بايثون -> سلسلة JSON؛json.loads()سلسلة JSON -> بايثونjson.dump()بايثون -> ملف JSON؛json.load()ملف JSON -> بايثونensure_ascii=Falseيحافظ على الأحرف غير ASCII؛indent=2يُنسق الإخراج- تعيين أنواع JSON:
object->dict,array->list,number->int/float,null->None - الأنواع المخصصة تحتاج دالة تسلسل
default
📝 تمارين
-
أساسي (الصعوبة ⭐): أنشئ قاموساً يحتوي على اسمك وعمرك وثلاث هوايات (قائمة). استخدم
json.dumps()لإخراج سلسلة JSON منسقة (احفظ الأحرف، مسافة بادئة 2). -
متوسط (الصعوبة ⭐⭐): اكتب دالتين:
save_contacts(contacts)وload_contacts(). احفظ قائمة جهات اتصال (قائمة قواميس) إلىcontacts.jsonوتحميل تلقائي عند بدء البرنامج. كل جهة اتصال لها اسم وهاتف وبريد إلكتروني. -
تحدي (الصعوبة ⭐⭐⭐): نفذ "مُصدّر بيانات بسيط" باستخدام JSON. بالنظر إلى قائمة درجات الطلاب
students = [{"name": "Zhang San", "scores": {"Chinese": 85, "Math": 92}}]، أخرج كـ: 1) ملف JSON منسق؛ 2) سلسلة JSON مضغوطة (بدون مسافة بادئة)؛ 3) سلسلة JSON بمفاتيح مرتبة (sort_keys=True).