معالجة JSON في PHP: دليل شامل للعمل مع JSON

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

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

ابدأ الدورة

معالجة JSON في PHP: دليل شامل



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



الدوال الأساسية في PHP للعمل مع JSON



يوفر PHP دالتين رئيسيتين للعمل مع JSON:



  • json_encode($value, $options = 0, $depth = 512) — تحول قيمة PHP (مصفوفة، كائن، سلسلة نصية، رقم) إلى سلسلة JSON.
  • json_decode($json, $associative = false, $depth = 512, $options = 0) — تفك تشفير سلسلة JSON إلى قيمة PHP. إذا تم تعيين المعامل $associative إلى true، يتم إرجاع مصفوفة ترابطية، وإلا يتم إرجاع كائن stdClass.


لنلقِ نظرة على مثال بسيط:



<?php// إنشاء مصفوفة ترابطية$data = [    "name" => "إيفان",    "age" => 30,    "city" => "موسكو",    "skills" => ["PHP", "JavaScript", "Python"]];

// الترميز إلى JSON$json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);echo $json;// الإخراج:// {// "name": "إيفان",// "age": 30,// "city": "موسكو",// "skills": ["PHP", "JavaScript", "Python"]// }

// فك التشفير مرة أخرى إلى مصفوفة$decoded = json_decode($json, true);echo $decoded['name']; // إيفان?>


خيارات مهمة لـ json_encode



تدعم الدالة json_encode العديد من العلامات التي تغير سلوك الترميز. أكثرها فائدة:



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


مثال على دمج الخيارات:



<?php$data = ['product' => 'كتاب', 'price' => '1500.50', 'count' => 5];echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_NUMERIC_CHECK);// {"product":"كتاب","price":1500.5,"count":5}?>


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



يسمح PHP بالعمل مع هياكل JSON المتداخلة بعمق. لنلقِ نظرة على مثال لتحليل استجابة معقدة من API:



<?php// لنفترض أن هذه استجابة من API خارجي$apiResponse = '{    "status": "success",    "data": {        "users": [            {"id": 1, "name": "آنا", "roles": ["admin", "editor"]},            {"id": 2, "name": "بيتر", "roles": ["user"]}        ],        "pagination": {            "page": 1,            "totalPages": 3        }    }}';

$parsed = json_decode($apiResponse, true);

// استخراج أسماء جميع المستخدمين$names = array_column($parsed['data']['users'], 'name');print_r($names); // Array ( [0] => آنا [1] => بيتر )

// التحقق مما إذا كان المستخدم لديه دور adminforeach ($parsed['data']['users'] as $user) { if (in_array('admin', $user['roles'])) { echo "{$user['name']} لديه صلاحيات المسؤول"; }}?>


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



إحدى المشكلات الأكثر شيوعًا هي JSON غير الصحيح. يوفر PHP دوال لتشخيص الأخطاء:



  • json_last_error() — تعيد

توصيات