أدوات المطور · JSON المنسق والمدقق
JSON شرح عمليات الهروب من السلسلة: \n، \uXXXX وأحرف التحكم
· كيف يعمل
json سير عمل المطور تصديق
السطر الجديد الأولي الموجود داخل السلسلة JSON غير صالح، وكذلك علامة التبويب. يغطي هذا المنشور تسلسلات الهروب الثمانية، وكيفية عمل الهروب والأزواج البديلة، ولماذا يمكن للفقرة الملصقة أن تبطل ملفًا بأكمله.
الفقرة التي كسرت الحمولة
الفقرة التي أدت إلى تقسيم الحمولة - يؤدي لصق فاصل سطر مرئي في الوصف المقتبس إلى إدراج حرف تحكم مباشرة في السلسلة JSON. يبدو السطر الأول مكتملاً، لكن الاقتباس الافتتاحي لا يزال يتوقع محتوى السلسلة أو الاقتباس الختامي. عندما يصل المحلل اللغوي إلى تغذية السطر الأولي، فإنه يتوقف عند هذا الحد لأن JSON لا يمكن للسلاسل أن تمتد إلى الأسطر المادية بهذه الطريقة. يجب أن يحتوي النص على هروب مكون من حرفين `\n` حيثما تحتاج القيمة التي تم فك ترميزها إلى سطر جديد.
تتسبب علامات التبويب المنسوخة من مستند أو جدول بيانات في نفس فئة الفشل، على الرغم من أن المحرر قد يعرضها كمسافات غير ضارة. استبدل علامة التبويب الحرفية بـ `\t`، وحرف الإرجاع بـ `\r` وعناصر التحكم المحظورة الأخرى مع هروبها المسمى أو Unicode.
تسمح عمليات الهروب الثمانية JSON
تسمح عناصر الهروب الثمانية JSON — بعد الشرطة المائلة العكسية، النماذج القصيرة هي `"`، `\\`، `\/`، `\b`، `\f`، `\n`، `\r` و `\t`. وهي تمثل علامة اقتباس، وشرطة مائلة عكسية، وشرطة مائلة، ومسافة للخلف، وتغذية النموذج، وتغذية السطر، ورجوع السطر، وعلامة التبويب الأفقية. قد تظهر الشرطة المائلة أيضًا بدون هروب؛ `\/` موجود بشكل أساسي من أجل التوافق مع السياقات التي تعاملت في السابق مع تسلسل البرنامج النصي الختامي بشكل خاص.
لا يجوز لأي حرف آخر أن يتبع الخط المائل العكسي JSON. التسلسلات المألوفة في لغات البرمجة، مثل `\v`، `\0`، `\x41` أو شرطة مائلة عكسية متبوعة بسطر فعلي جديد، غير صالحة هنا. استخدم `\u` متبوعًا بأربعة أرقام ست عشرية بالضبط في حالة عدم وجود هروب قصير. تحافظ هذه المفردات الثابتة الصغيرة على JSON سلاسل قابلة للنقل: لا يحتاج المستهلك إلى JavaScript أو قواعد الهروب الخاصة بـ Python أو Shell لتحديد الأحرف الممثلة بنص صالح.
لماذا علامة التبويب الحرفية غير صالحة ولكن الحرف é جيد
لماذا تكون علامة التبويب الحرفية غير صالحة ولكن الحرف é جيد - JSON يمنع نقاط التعليمات البرمجية التي لم يتم إلغاؤها من U+0000 إلى U+001F داخل السلاسل. يحتوي هذا النطاق على علامات تبويب وأسطر جديدة وعناصر تحكم أخرى يمكن أن تؤدي تأثيراتها غير المرئية إلى تعطيل الإطارات أو العرض. الحرف `é` هو U+00E9، وهو خارج نطاق التحكم، لذلك قد يقوم UTF-8 JSON بتضمينه مباشرة بين علامتي الاقتباس. وينطبق الشيء نفسه على معظم النصوص والرموز والرموز التعبيرية.
ولذلك فإن الهروب من Unicode العادي يعد أمرًا اختياريًا، وليس شرطًا للنظافة. يتم فك ترميز `"café"` و`"caf\u00e9"` بنفس تسلسل الأحرف. عادةً ما يكون النص المباشر أسهل على الأشخاص في القراءة، بينما يمكن أن تساعد عمليات الهروب في نقل ASCII فقط أو جعل وحدة تعليمات برمجية معينة مرئية. شخصيات التحكم مختلفة: هروبهم إلزامي.
كيف يهرب \uXXXX من العمل
كيف يفلت `\uXXXX` من العمل - يجب أن يتبع `u` أربعة أرقام ست عشرية بالضبط، باستخدام 0–9 أو A–F في كلتا الحالتين. يمثل `\u00E9` وحدة الكود UTF-16 لـ `é`، ويمثل `\u000A` تغذية الأسطر. عدد أقل من الأرقام، والأقواس مثل `\u{1F600}` أو حرف غير سداسي عشري يجعل JSON غير صالح، حتى لو كانت لغة برمجة أخرى تقبل هذا الترميز.
يتم تمثيل الأحرف فوق U+FFFF في نموذج الهروب هذا كزوج بديل. يمكن كتابة الرمز التعبيري 😀 بالشكل `\uD83D\uDE00`: يتم الجمع بين البديل العالي والمنخفض بعد التحليل في قيمة عددية Unicode واحدة. JSON يمكن أن تحمل القواعد النحوية هروبًا بديلاً غير مقترن، ولكن قد ترفضه برامج التشفير والتطبيقات النهائية أو تستبدله لأنه لا يحدد حرف Unicode الكامل.
مثال عملي: الهروب من مسار Windows ومقتطف من HTML
مثال عملي: الهروب من مسار Windows ومقتطف من HTML - المسار المقصود `C:\Temp\report.txt` يحتاج إلى مضاعفة كل شرطة مائلة عكسية في JSON المصدر: `"C:\\Temp\\report.txt"`. بدون المضاعفة، `\T` هو هروب غير صالح ويمكن أن تصبح التسلسلات مثل `\r` أو `\t` أحرف تحكم بصمت بدلاً من فواصل المسار. أنشئ JSON من القيمة المقصودة، وليس عن طريق تخمين الخطوط المائلة المعروضة التي تنتمي بالفعل إلى لغة خارجية.
قد يحتفظ جزء HTML مثل `<a title="Report">Open</a>` بالأقواس الزاوية والشرطة المائلة حرفيًا، ولكن يجب أن تصبح علامات اقتباس السمات `\"` داخل السلسلة JSON. إذا كان هناك سطر جديد يفصل بين علامتين، فقم بترميزه كـ `\n`. يمكن التحقق من صحة عضو JSON الناتج وتحليله مرة أخرى إلى النص الأصلي HTML.
حيث تتضاعف حالات الهروب
حيث تتضاعف عمليات الهروب - تحصل كل قواعد نحوية للنص على فرصتها الخاصة لتفسير الخطوط المائلة العكسية. يجب أن يتجاوز المستند JSON الذي يحتوي على السلسلة التي تم فك تشفيرها `line1\nline2` تلك الشرطة المائلة العكسية، مما ينتج عنه `"line1\\nline2"`. إذا تم تخزين هذا النص JSON كسلسلة JSON، فإن علامات الاقتباس والشرطتين المائلتين العكسيتين تحتاج إلى طبقة أخرى من الهروب. تسجل الفوضى الظاهرة تمثيلات متعددة، وليس نموذجًا موسعًا خاصًا لـ JSON.
تضيف الأصداف والقيم الحرفية للغة البرمجة قواعد الاقتباس الخاصة بها قبل أن يرى المحلل اللغوي JSON الوسيطة. التشخيص من الداخل إلى الخارج: اكتب القيمة التي تم فك تشفيرها بالضبط أولاً، ثم قم بتشفيرها كـ JSON مرة واحدة، ثم قم بتشفير هذا النص الكامل JSON للغة الصدفة المحيطة أو لغة المصدر. عند كل حد، افحص البايتات أو الأحرف التي يتلقاها المحلل اللغوي التالي بالفعل.
ما لا يغطيه هذا
ما لا يغطيه هذا - HTML كيانات مثل `"` وURL ترميز النسبة المئوية مثل `%20` هي تحويلات منفصلة لسياقات نحوية منفصلة. لا يقوم المحلل اللغوي JSON بفك تشفير أي من النموذجين. تحتوي السلسلة `"""` على ستة أحرف حرفية بعد التحليل، وليس علامة اقتباس، وتحتوي `"%20"` على علامة النسبة المئوية متبوعة برقمين، وليس مسافة. قم بتطبيق هذه الترميزات فقط عندما تعبر البيانات إلى HTML أو مكون URL.
هذه المناقشة أيضًا لا تحل محل ترميز الإخراج. يمكن أن يحتوي JSON الصالح المستلم من مصدر غير موثوق على HTML أو نص يشبه البرنامج النصي أو تسلسلات التحكم الطرفية كبيانات سلسلة عادية. يجب على التطبيق الذي يعرض أمرًا أو ينفذه لاحقًا أن يتعامل مع تلك الوجهة بأمان. JSON الهروب يحمي هيكل JSON؛ إنه ليس تعقيمًا عالميًا.
الخلاصة: الفرار مما نهى عنه النحو لا أكثر
الخلاصة: اهرب مما تحظره القواعد النحوية، لا أكثر - علامات الاقتباس المزدوجة والخطوط المائلة العكسية ونقاط التعليمات البرمجية الموجودة أسفل U+0020 تحتاج إلى الاهتمام داخل سلاسل JSON. يمكن أن يظل Unicode العادي قابلاً للقراءة، بينما يوفر `\uXXXX` بديلاً دقيقًا مكونًا من أربعة أرقام وتمثل الأزواج البديلة أحرفًا أعلى من U+FFFF. غالبًا ما يحدد التشخيص في موضع فارغ على ما يبدو سطرًا جديدًا حرفيًا أو علامة تبويب أو حرف تحكم آخر يجب استبداله بالهروب النصي الخاص به.
حساب طبقات التشفير بدلاً من حساب الخطوط المائلة حسب البصر. ابدأ من القيمة التي يجب أن يتلقاها التطبيق، وقم بتشفيرها مرة واحدة لـ JSON وبعد ذلك فقط اقتبس المستند الناتج لأي غلاف خارجي أو ملف مصدر أو سلسلة JSON ثانية. تحقق من صحة النص المقدم إلى المحلل اللغوي JSON، وعندما تكون الصحة مهمة، افحص السلسلة التي تم فك تشفيرها بعد ذلك.