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

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

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

ابدأ الدورة

مقدمة: لماذا يحتاج PHP إلى JSON؟

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

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



1. تسلسل البيانات: دالة json_encode()

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



الصيغة الأساسية والأمثلة

<?php// مصفوفة بسيطة$colors = ["red", "green", "blue"];echo json_encode($colors);// الإخراج: ["red","green","blue"]

// مصفوفة ترابطية$user = [ "name" => "Иван", "age" => 30, "is_admin" => false];echo json_encode($user);// الإخراج: {"name":"Иван","age":30,"is_admin":false}?>


العلامات المفيدة لـ json_encode()

تدعم الدالة معاملًا ثانيًا — قناع بت للعلامات. دعنا نلقي نظرة على الأكثر فائدة:

  • JSON_PRETTY_PRINT — يقوم بتنسيق الإخراج مع مسافات بادئة لسهولة القراءة.
  • JSON_UNESCAPED_UNICODE — لا يقوم بإفلات الأحرف السيريلية وأحرف Unicode الأخرى (وإلا ستتحول الأحرف الروسية إلى \\uXXXX).
  • JSON_NUMERIC_CHECK — يحول السلاسل التي تحتوي على أرقام إلى نوع رقمي.
  • JSON_FORCE_OBJECT — يحول المصفوفة قسرًا إلى كائن حتى بالنسبة للمصفوفات المفهرسة.


<?php$data = ["name" => "Анна", "age" => "25"];

// بدون علاماتecho json_encode($data);// {"name":"\\u0410\\u043d\\u043d\\u0430","age":"25"}

// مع العلاماتecho json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);/*{ "name": "Анна", "age": "25"}*/?>


2. تحليل JSON: دالة json_decode()

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



التحليل إلى كائن وإلى مصفوفة

<?php$jsonString = '{"name":"Петр","age":28,"skills":["PHP","MySQL"]}';

// افتراضيًا — كائن$obj = json_decode($jsonString);echo $obj->name; // Петрecho $obj->skills[0]; // PHP

// مع العلامة true — مصفوفة ترابطية$arr = json_decode($jsonString, true);echo $arr["name"]; // Петрecho $arr["skills"][1]; // MySQL?>


عمق التكرار

المعامل الثالث depth يحد من عمق التداخل. القيمة الافتراضية هي 512 مستوى. هذه حماية ضد هجمات من نوع "billion laughs attack":

<?php$malicious = '{"a":{"b":{"c":"d"}}}';$result = json_decode($malicious, false, 2); // الحد الأقصى مستويين// سيعيد null لأن العمق تجاوز?>


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

واحدة من أكثر المشاكل شيوعًا هي سلسلة JSON غير الصحيحة. PHP لا تطرح استثناءً عند حدوث خطأ في التحليل، بل تعيد null. لفهم ما حدث من خطأ، استخدم الدالة json_last_error() و json_last_error_msg().



التحقق من الأخطاء

<?php$badJson = '{"name": "Ошибка, без кавычки}';$data = json_decode($badJson);

if (json_last_error() !== JSON_ERROR_NONE) { echo "خطأ JSON: " . json_last_error_msg();?>

المدونات

توصيات الكتب