التعامل مع بيانات JSON السيئة باستخدام json_decode() في PHP
عند التعامل مع بيانات JSON باستخدام json_decode()، من الضروري التعامل مع البيانات غير الصالحة بشكل فعال. على الرغم من أن البرنامج النصي المقدم يمكنه اكتشاف JSON غير صحيح لسلاسل مثل { bar: "baz" }، إلا أنه يفشل في التعامل مع البيانات غير النصية مثل "بيانات غير صالحة."
فهم json_decode()
لمعالجة هذه المشكلة، من الضروري فهم json_decode():
قمع التحذيرات باستخدام علامة الخطأ. @ Operator
لمنع التحذيرات، أحد الخيارات هو استخدام عامل التشغيل @:
$data = @json_decode($_POST);
يعمل هذا الأسلوب على إسكات التحذير، ولكنه يتطلب عمليات فحص إضافية للتعامل مع الأخطاء والقيم الخالية:
if ($data === null && json_last_error() !== JSON_ERROR_NONE) { echo "Incorrect data"; }
معالجة الأخطاء المخصصة
هناك خيار آخر وهو إنشاء برنامج نصي مخصص لمعالجة الأخطاء:function Handle_json_error() { $خطأ = json_last_error(); التبديل (خطأ) { الحالة JSON_ERROR_NONE: عودة صحيحة؛ الحالة JSON_ERROR_DEPTH: صدى "تم تجاوز الحد الأقصى للعمق"؛ استراحة؛ الحالة JSON_ERROR_STATE_MISMATCH: صدى "JSON غير صالح أو مشوه"؛ استراحة؛ الحالة JSON_ERROR_CTRL_CHAR: صدى "خطأ في حرف التحكم"; استراحة؛ الحالة JSON_ERROR_SYNTAX: صدى "خطأ في بناء الجملة"؛ استراحة؛ الحالة JSON_ERROR_UTF8: صدى "أحرف UTF-8 مشوهة"؛ استراحة؛ تقصير: صدى "خطأ غير معروف"؛ } عودة كاذبة. } إذا (!handle_json_error()) { صدى "بيانات JSON سيئة!";
function handle_json_error() { $error = json_last_error(); switch ($error) { case JSON_ERROR_NONE: return true; case JSON_ERROR_DEPTH: echo "Maximum depth exceeded"; break; case JSON_ERROR_STATE_MISMATCH: echo "Invalid or malformed JSON"; break; case JSON_ERROR_CTRL_CHAR: echo "Control character error"; break; case JSON_ERROR_SYNTAX: echo "Syntax error"; break; case JSON_ERROR_UTF8: echo "Malformed UTF-8 characters"; break; default: echo "Unknown error"; } return false; } if (!handle_json_error()) { echo "Bad JSON data!"; }يوفر هذا البرنامج النصي رسائل خطأ مفصلة ويتعامل مع أخطاء تحليل JSON المتنوعة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3