معالجة JSON في PHP: الدوال، الأمثلة وأفضل الممارسات

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

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

ابدأ الدورة

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



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



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



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



  • json_encode() — تحول قيمة PHP (مصفوفة، كائن، سلسلة نصية) إلى سلسلة JSON.
  • json_decode() — تفك تشفير سلسلة JSON إلى قيمة PHP.


مثال على الاستخدام الأساسي لـ json_encode()



<?php// البيانات الأصلية: مصفوفة ترابطية$data = [    'name' => 'إيفان',    'age' => 30,    'skills' => ['PHP', 'JavaScript', 'Python']];

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


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



{    "name": "إيفان",    "age": 30,    "skills": [        "PHP",        "JavaScript",        "Python"    ]}


العلامة JSON_UNESCAPED_UNICODE تحافظ على الأحرف العربية دون ترميز، بينما JSON_PRETTY_PRINT تقوم بتنسيق الإخراج مع مسافات بادئة لسهولة القراءة.



مثال على فك تشفير JSON في PHP



<?php$jsonString = '{"name":"آنا","age":25,"city":"موسكو"}';

// فك التشفير إلى مصفوفة ترابطية (الوسيطة الثانية true)$array = json_decode($jsonString, true);echo $array['name']; // آناecho $array['city']; // موسكو

// فك التشفير إلى كائن (الافتراضي)$object = json_decode($jsonString);echo $object->name; // آنا?>


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



عند العمل مع بيانات خارجية، من المهم التحقق من صحة JSON. استخدم json_last_error() و json_last_error_msg() لذلك:



<?php$invalidJson = '{name: "خطأ"}'; // JSON غير صالح (لا توجد علامات اقتباس للمفتاح)

$decoded = json_decode($invalidJson);

if (json_last_error() !== JSON_ERROR_NONE) { $errorMsg = json_last_error_msg(); echo "خطأ في فك تشفير JSON: $errorMsg"; // الإخراج: خطأ في فك تشفير JSON: Syntax error}?>


العمل مع الهياكل المتداخلة



JSON مناسب تمامًا للبيانات الهرمية المعقدة. لننظر إلى مثال مع مصفوفات وكائنات متداخلة:



<?php$complexData = [    'users' => [        [            'id' => 1,            'name' => 'بيتر',            'orders' => [                ['product' => 'لابتوب', 'price' => 75000],                ['product' => 'فأرة', 'price' => 1500]            ]        ],        [            'id' => 2,            'name' => 'ماريا',            'orders' => []        ]    ],    'total_orders' => 2];

$json = json_encode($complexData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);file_put_contents('data.json', $json); // حفظ في ملف

// القراءة مرة أخرى$jsonFromFile = file_get_contents('data.json');$restoredData = json_decode($jsonFromFile, true);

// الوصول إلى البيانات المتداخلةecho $restoredData['users'][0]['orders'][0]['product']; // لابتوب?>


الخيارات المتقدمة لـ json_encode()



يدعم PHP العديد من العلامات للتحكم الدقيق في الترميز:



  • JSON_FORCE_OBJECT — يفرض ترميز المصفوفة ككائن.
  • JSON_NUMERIC_CHECK — يحول السلاسل الرقمية إلى أرقام.
  • JSON_UNESCAPED_SLASHES — لا يقوم بترميز الشرط المائلة.
  • JSON_THROW_ON_ERROR — يطرح استثناء عند حدوث خطأ (

توصيات