العمل مع JSON في PHP: تحليل البيانات وتسلسلها

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع JSON في PHP: دليل كامل للتحليل والتسلسل



JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات يُستخدم على نطاق واسع في تطوير الويب. يوفر PHP دوالًا مدمجة قوية للعمل مع JSON، مما يسمح بتحويل البيانات بسهولة بين هياكل PHP وسلاسل JSON. في هذه المقالة، سنشرح بالتفصيل كيفية إجراء التحليل (فك الترميز) والتسلسل (الترميز) لـ JSON في PHP، بالإضافة إلى استعراض الأخطاء النموذجية وطرق معالجتها.



ما هو JSON ولماذا هو مطلوب في PHP؟



JSON هو تنسيق نصي يعتمد على بناء جملة JavaScript. يُستخدم لنقل البيانات المنظمة بين الخادم والعميل (على سبيل المثال، في REST API). في PHP، لا غنى عن JSON في الحالات التالية:



  • تبادل البيانات مع واجهات برمجة التطبيقات الخارجية (مثل خدمات الطقس، أنظمة الدفع)
  • تخزين ملفات التكوين
  • تسلسل البيانات للتخزين المؤقت
  • العمل مع WebSockets وطلبات AJAX


يدعم PHP العمل مع JSON بدءًا من الإصدار 5.2.0. جميع الدوال الضرورية مدمجة في النواة — ولا يلزم تثبيت إضافات إضافية.



تسلسل البيانات إلى JSON (json_encode)



تقوم الدالة json_encode() بتحويل قيم PHP (المصفوفات، الكائنات، السلاسل، الأرقام) إلى سلسلة JSON. لنلقِ نظرة على مثال أساسي:



<?php// مصفوفة ترابطية$user = [    'name' => 'إيفان بيتروف',    'age' => 28,    'email' => 'ivan@example.com',    'is_active' => true,    'hobbies' => ['برمجة', 'شطرنج', 'جري']];

// الترميز إلى JSON$jsonString = json_encode($user, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);echo $jsonString;?>


نتيجة التنفيذ:



{    "name": "إيفان بيتروف",    "age": 28,    "email": "ivan@example.com",    "is_active": true,    "hobbies": [        "برمجة",        "شطرنج",        "جري"    ]}


العلامات المهمة لـ json_encode



  • JSON_UNESCAPED_UNICODE — يحافظ على الأحرف السيريلية (بدون هذه العلامة، سيتم ترميز الأحرف العربية/الروسية كـ \\uXXXX)
  • JSON_PRETTY_PRINT — ينسق المخرجات بمسافات بادئة لسهولة القراءة
  • JSON_NUMERIC_CHECK — يحول السلاسل الرقمية إلى أرقام
  • JSON_FORCE_OBJECT — يُنشئ كائنًا إجباريًا، حتى إذا تم تمرير مصفوفة فارغة


تحليل JSON في PHP (json_decode)



تقوم الدالة json_decode() بالتحويل العكسي — من سلسلة JSON إلى قيمة PHP. افتراضيًا، تُرجع كائنًا. للحصول على مصفوفة ترابطية، مرر المعامل الثاني true:



<?php$jsonString = '{"name":"إيفان بيتروف","age":28,"email":"ivan@example.com","is_active":true}';

// فك الترميز إلى كائن$userObject = json_decode($jsonString);echo $userObject->name; // إيفان بيتروف

// فك الترميز إلى مصفوفة ترابطية$userArray = json_decode($jsonString, true);echo $userArray['name']; // إيفان بيتروف?>


عمق التداخل



المعامل الثالث لـ json_decode() — depth — يحد من عمق التكرار. القيمة الافتراضية هي 512. هذا يحمي من هجمات مثل "billion laughs attack":



<?php$deepJson = '{"a":{"b":{"c":{"d":"test"}}}}';$data = json_decode($deepJson, true, 3); // خطأ إذا كان العمق أكبر من 3?>


معالجة الأخطاء عند العمل مع JSON



عند تحليل JSON غير صحيح، تُرجع json_decode() القيمة null. للحصول على معلومات مفصلة عن الخطأ، استخدم json_last_error() و json_last_error_msg():



<?php$badJson = '{"name": "إيفان", age: 28}'; // خطأ: مفتاح age بدون علامات اقتباس

$data = json_decode($badJson, true);

if (json_last_error() !== JSON_ERROR_NONE) {

المدونات

توصيات الكتب