معالجة JSON في PHP: دليل شامل
JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات أصبح المعيار الفعلي للتواصل بين الخادم والعميل. في PHP، يتم العمل مع JSON بشكل أصلي عبر امتداد json، المتاح بدءًا من PHP 5.2.0. في هذه المقالة، سنشرح بالتفصيل الدوال الأساسية، معالجة الأخطاء، العمل مع الهياكل المتداخلة وأفضل الممارسات.
الدوال الأساسية للعمل مع JSON
توفر PHP دالتين رئيسيتين:
json_encode()— تحول قيمة PHP (مصفوفة، كائن، سلسلة نصية، إلخ) إلى سلسلة JSON.json_decode()— تحول سلسلة JSON مرة أخرى إلى متغير PHP (مصفوفة أو كائن).
مثال: ترميز مصفوفة إلى JSON
<?php$data = [ 'name' => 'Alice', 'age' => 30, 'is_student' => false, 'skills' => ['PHP', 'JavaScript', 'Python']];
$json = json_encode($data, JSON_PRETTY_PRINT);echo $json;?>نتيجة التنفيذ:
{ "name": "Alice", "age": 30, "is_student": false, "skills": [ "PHP", "JavaScript", "Python" ]}مثال: فك ترميز JSON إلى مصفوفة
<?php$jsonString = '{"name":"Bob","age":25,"is_active":true}';
// المعامل الثاني true — يُرجع مصفوفة ترابطية$array = json_decode($jsonString, true);print_r($array);?>النتيجة:
Array( [name] => Bob [age] => 25 [is_active] => 1)الأعلام للضبط الدقيق
تدعم الدالتان json_encode() و json_decode() معاملًا ثانيًا — قناع بت للأعلام. دعنا نستعرض الأكثر فائدة:
- JSON_PRETTY_PRINT — تنسيق المخرجات بمسافات بادئة (للقابلية للقراءة).
- JSON_UNESCAPED_UNICODE — لا يقوم بإفلات رموز Unicode (مفيد للسيريلية).
- JSON_FORCE_OBJECT — يحول المصفوفة الترابطية إلى كائن بشكل إجباري.
- JSON_NUMERIC_CHECK — يحول السلاسل النصية التي تحتوي على أرقام إلى النوع الرقمي.
مثال مع السيريلية والتنسيق
<?php$data = [ 'name' => 'Алексей', 'city' => 'Москва'];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);?>النتيجة:
{ "name": "Алексей", "city": "Москва"}معالجة الأخطاء عند العمل مع JSON
إذا كانت السلسلة النصية المدخلة ليست JSON صالحًا، فإن json_decode() سترجع null. لمعرفة السبب الدقيق للخطأ، استخدم الدالتين json_last_error() و json_last_error_msg().
<?php$invalidJson = '{name: "Alice"}'; // JSON غير صالح (مفاتيح بدون علامات اقتباس)
$result = json_decode($invalidJson);if (json_last_error() !== JSON_ERROR_NONE) { echo 'خطأ: ' . json_last_error_msg();} else { print_r($result);}?>المخرجات:
خطأ: Syntax errorالقائمة الكاملة لثوابت الأخطاء:
JSON_ERROR_NONE— لا توجد أخطاء.JSON_ERROR_DEPTH— تم تجاوز الحد الأقصى لعمق المكدس.JSON_ERROR_STATE_MISMATCH— JSON غير صحيح (عدم تطابق الأقواس).JSON_ERROR_SYNTAX— خطأ نحوي.JSON_ERROR_UTF8— ترميز UTF-8 غير صحيح.
العمل مع الهياكل المتداخلة
غالبًا ما يحتوي JSON على كائنات ومصفوفات متداخلة. تسمح PHP بمعالجة هذه البيانات بسهولة باستخدام التكرار أو الحلقات.
<?php$complexJson = '{ "users": [ {"name": "Alice