أساسيات التعامل مع ملفات JSON (لغة التفاهم بين الأنظمة)


أساسيات التعامل مع ملفات JSON (لغة التفاهم بين الأنظمة)

ماذا سنبني اليوم؟

سنتعلم اليوم أساسيات التعامل مع ملفات JSON (JavaScript Object Notation)، وهي صيغة خفيفة الوزن لتبادل البيانات، وكيفية استخدامها كلغة تفاهم بين الأنظمة المختلفة. سنقوم بتغطية هيكل JSON، وكيفية قراءتها (Parsing) وكتابتها (Serialization) باستخدام لغة Python.

ما هو JSON؟

JSON هي اختصار لـ "JavaScript Object Notation". على الرغم من اسمها، إلا أنها مستقلة عن JavaScript وتستخدم على نطاق واسع في جميع لغات البرمجة تقريباً لتمثيل البيانات المهيكلة. إنها سهلة القراءة والكتابة بالنسبة للبشر، وسهلة التحليل والتوليد بواسطة الآلات.

ملاحظة تقنية: JSON هي البديل الأكثر شيوعاً لـ XML في تطبيقات الويب الحديثة، وذلك لخفتها وسهولة التعامل معها.

هيكل JSON الأساسي

تعتمد JSON على مفهومين أساسيين لتمثيل البيانات:

  1. الأشياء (Objects): مجموعة غير مرتبة من أزواج المفتاح/القيمة. تُحاط بالأقواس المتعرجة {}. المفاتيح يجب أن تكون سلاسل نصية (Strings) محاطة بعلامتي اقتباس مزدوجة، والقيم يمكن أن تكون سلاسل نصية، أرقام، كائنات JSON، مصفوفات JSON، قيم منطقية (true/false)، أو null.
  2. المصفوفات (Arrays): قائمة مرتبة من القيم. تُحاط بالأقواس المربعة []. يمكن أن تحتوي القيم على أي نوع من أنواع بيانات JSON.

مثال على هيكل JSON:

{
  "اسم_المنتج": "هاتف ذكي X",
  "السعر": 999.99,
  "متوفر": true,
  "الالوان_المتاحة": ["أسود", "أبيض", "أزرق"],
  "التقييمات": [
    {"المستخدم": "أحمد", "النجمة": 5, "تعليق": "منتج رائع!"},
    {"المستخدم": "سارة", "النجمة": 4, "تعليق": "بطارية ممتازة."}
  ],
  "تفاصيل_إضافية": null
}

التعامل مع JSON في Python

توفر Python مكتبة مدمجة تسمى json تسمح لنا بتحويل سلاسل JSON إلى كائنات Python (مثل القواميس والقوائم) والعكس.

تحويل JSON إلى كائن Python (Parsing)

لتحويل سلسلة نصية بصيغة JSON إلى كائن Python (عادةً قاموس أو قائمة)، نستخدم الدالة json.loads() (من "load string").

مثال:

import json

# سلسلة JSON نصية
json_string = """
{
  "اسم_المنتج": "هاتف ذكي X",
  "السعر": 999.99,
  "متوفر": true,
  "الالوان_المتاحة": ["أسود", "أبيض", "أزرق"],
  "التقييمات": [
    {"المستخدم": "أحمد", "النجمة": 5, "تعليق": "منتج رائع!"},
    {"المستخدم": "سارة", "النجمة": 4, "تعليق": "بطارية ممتازة."}
  ],
  "تفاصيل_إضافية": null
}
"""

# تحويل سلسلة JSON إلى قاموس Python
product_data = json.loads(json_string)

print("نوع البيانات بعد التحويل:", type(product_data))
print("اسم المنتج:", product_data["اسم_المنتج"])
print("اللون الأول المتاح:", product_data["الالوان_المتاحة"][0])
print("تعليق التقييم الأول:", product_data["التقييمات"][0]["تعليق"])

# مثال على الوصول لبيانات غير موجودة (سيرفع KeyError إذا لم يتم التعامل معها)
# print(product_data["وزن"])

ملاحظة تقنية: عند التعامل مع ملفات JSON المخزنة على القرص، نستخدم الدالة json.load() (بدون 's') التي تقبل كائن ملف (file object) مباشرة.

تحويل كائن Python إلى JSON (Serialization)

لتحويل كائن Python (مثل قاموس أو قائمة) إلى سلسلة نصية بصيغة JSON، نستخدم الدالة json.dumps() (من "dump string").

مثال:

import json

# قاموس Python
user_profile = {
    "المعرف": 101,
    "اسم_المستخدم": "john_doe",
    "البريد_الإلكتروني": "john.doe@example.com",
    "نشط": True,
    "الاهتمامات": ["برمجة", "أتمتة", "SEO"],
    "آخر_تسجيل_دخول": "2023-10-26T10:30:00Z"
}

# تحويل قاموس Python إلى سلسلة JSON
json_output = json.dumps(user_profile)

print("نوع البيانات بعد التحويل:", type(json_output))
print("\nسلسلة JSON الناتجة:")
print(json_output)

# لجعل الإخراج أكثر قابلية للقراءة (Pretty Print)
pretty_json_output = json.dumps(user_profile, indent=4, ensure_ascii=False)
print("\nسلسلة JSON الناتجة (منسقة):")
print(pretty_json_output)

ملاحظة تقنية: المعامل indent=4 يجعل إخراج JSON منسقاً بأربعة مسافات، مما يجعله أسهل للقراءة. المعامل ensure_ascii=False ضروري لعرض الأحرف العربية بشكل صحيح في الإخراج.

النتيجة النهائية المتوقعة

بعد تشغيل الأكواد المذكورة أعلاه في بيئة Python، ستلاحظ ما يلي:

  1. سيتم تحويل السلسلة النصية JSON الأولى إلى قاموس Python، وستتمكن من الوصول إلى البيانات الفردية داخل هذا القاموس باستخدام مفاتيحها.
  2. سيتم تحويل قاموس Python الثاني إلى سلسلة نصية بصيغة JSON. ستتم طباعة هذه السلسلة مرتين: مرة بصيغة مضغوطة ومرة أخرى بصيغة منسقة (Pretty Print) مع الأحرف العربية ظاهرة بشكل صحيح، مما يوضح كيف يمكن لـ JSON أن يكون لغة تفاهم واضحة بين الأنظمة والخدمات المختلفة.