العربية

أدوات المطور · محولات بناء الجملة

YAML إلى JSON اكتب الإكراه: كيف تغير "نعم" و"لا" و0777 المعنى

· كيف يعمل

yaml json تنسيقات البيانات

YAML الرموز العددية المتفرعة إلى سلاسل وأرقام وقيم منطقية وخالية
الرسم التوضيحي المتجه الأصلي ToolAcre

YAML يحلل الكميات غير المقتبسة إلى أنواع، وتختلف القواعد بين YAML 1.1 و1.2. يوضح هذا المنشور بالضبط كيف يقرر المحول أن القيمة هي قيمة منطقية أو عدد صحيح أو عدد عائم أو سلسلة، وكيفية التحكم في النتيجة.

القيمة التي عادت على أنها صحيحة — العدد القياسي YAML المقصود به كنص، وتم تحويله إلى JSON كقيمة منطقية، والخدمة التي أسيء التصرف بعد ذلك

يمكن أن تصبح قيمة مثل `NO` خاطئة في محمل YAML 1.1، ولكن هذا ليس ما يأتي به هذا المحول. يستخدم كلا الخيارين ToolAcre مخططات YAML 1.2، لذلك تظل `NO` و`yes` و`no` و`on` و`off` سلاسل. الافتتاح المصحح مهم لأن المثال الذي يدعي أن هذه اللوحة تحول `NO` إلى صحيح أو خطأ من شأنه أن يعلم عكس سلوكها الذي تم اختباره.

مفاجآت النوع لا تزال موجودة. ضمن المخطط الافتراضي JSON، تكون `null` فارغة بينما تظل `~`، وهي قيمة فارغة و`0o755` سلاسل. يؤدي تحديد Core إلى تغيير هذه النماذج الثلاثة إلى null وnull و493. يعد الإخراج مفيدًا على وجه التحديد لأنه يعرض القيمة JavaScript التي تم حلها، بدلاً من التظاهر بأن كل رمز مميز YAML يحمل نوعًا واضحًا.

القيمة التي بقي فيها النص ضمن YAML 1.2

يحدث الحل الضمني أثناء قراءة js-yaml للمصدر. يحدد المخطط المقيد المحدد ما إذا كان العدد القياسي العادي يتطابق مع نموذج فارغ أو منطقي أو رقمي قبل أن يكتب المحول JSON. يتجاوز الاقتباس هذا القرار: `"0o755"` هو نص ضمن أي من المخططين، وتظل الكتلة العددية عبارة عن سلسلة تتضمن فواصل الأسطر التي يمثلها مؤشر القضم بصوت عالي.

هذا هو التحليل والتسلسل، وليس استبدال التعبير العادي. يقوم القارئ ببناء السلاسل والأرقام والقيم المنطقية والأصفار والمصفوفات والكائنات؛ `JSON.stringify` ثم يقوم بإصدار تلك القيم مع المسافة البادئة المحددة. لقد انتهت التعليقات والتهجئة المميزة بالفعل في مرحلة الكتابة، لذلك لا يمكن لأي برنامج تسلسل إعادة بناء ما إذا كان الرقم في الأصل رقمًا عشريًا أو مكتوبًا بتدوين YAML مقبول آخر.

قواعد YAML 1.1 — نعم/no/on/off منطقية، 0777 كنظام ثماني، 1:30 كنظام ستيني، وسلاسل الإصدار مثل 1.10 تُقرأ على هيئة عوامات

يسرد المخطط التفصيلي YAML 1.1 عمليات الإكراه مثل الوقت الستيني والثماني القديم. إنها مخاطر توافق ذات صلة، ولكنها ليست أوضاعًا متاحة هنا. ToolAcre لا يقدم عن قصد مخطط 1.1. تشير واجهة المستخدم الخاصة به إلى أن أيًا من الخيارين المشحونين لا يقرأ `NO` كخطأ، وتثبت الاختبارات رمز البلد والكلمات نعم، لا، تشغيل وإيقاف كسلاسل.

يغير هذا الحد أسلوب التصحيح. إذا قام تطبيق آخر بتحويل هذه الكلمات إلى كلمات منطقية، فقارن تكوين المحلل اللغوي الخاص به بـ ToolAcre بدلاً من توقع إخراج مماثل. يمكن للمحول إظهار ما ينتجه المخططان الخاصان به؛ ولا يمكنه التصديق على المخطط أو الإصدار المستخدم بواسطة مشغل CI أو إطار العمل أو نظام النشر الذي يستهلك الملف لاحقًا.

YAML 1.1 تعتبر عمليات الإكراه من المخاطر التي يتجنبها هذا المحول

يقبل مخطط JSON الافتراضي التهجئة العددية فقط المتوافقة مع نموذج JSON. يضيف Core الأشكال الخالية YAML المألوفة، والأعداد الصحيحة السداسية العشرية والثمانية، وInfinity وNaN. لا يزال Core موجودًا داخل مُحمل مقيد: يتم رفض علامات الكائنات الخاصة باللغة والتواريخ والمجموعات والخرائط المطلوبة والعلامات الثنائية بدلاً من إنشائها.

يكشف Infinity وNaN عن حدود أخرى. يمكن لـ JavaScript الاحتفاظ بها، ولكن لا يمكن لـ JSON كتابتها. يعرّف المحول كل مسار ويحذر من أن القيمة تصبح فارغة. هذه خطوة خاسرة معترف بها، وليست تحويلاً بلا خسارة. يتجنب الاقتباس `.inf` ذلك لأن القيمة تظل السلسلة الحرفية `.inf`.

يختلف المخططان المشحونان YAML 1.2 فقط في النماذج العددية الموثقة

الصق `tilde: ~`، `empty:`، `octal: 0o755`، `country: NO` و `answer: yes`. مع تحديد صارم، تكون القيم JSON هي `"~"`، `""`، ​​`"0o755"`، `"NO"` و`"yes"`. مع تحديد المركز، فإن التغييرات الثلاثة الأولى فقط: التلدة والفارغ تصبح فارغة، والثماني يصبح 493. البلد والإجابة تبقى نصًا في كلا الناتجين.

الآن اقتبس كل قيمة وكررها. يقوم كلا المخططين بإرجاع سلاسل لأن المصدر يذكر النوع المقصود. هذه المقارنة دقيقة من حيث التعليمات البرمجية وأكثر فائدة من مقارنة YAML 1.1 مع 1.2 داخل أداة لا يتم تحميل 1.1 مطلقًا. كما أنه يوفر أداة قابلة للمراجعة للتحقق من محلل آخر دون التخمين من خلال وثائقه وحدها.

مثال عملي: ملف واحد ضمن مخططات ToolAcre الصارمة والأساسية

يتم قبول العلامات القياسية الصريحة فقط عندما يتعرف عليها المخطط المقيد: `!!str 123` يصبح السلسلة `123`، بينما `!!int "7"` يصبح الرقم 7. يتم رفض العلامات مثل `!!binary`، `!!timestamp`، `!!set`، `!!js/function` ومنشئات كائنات Python. وهذا يمنع القارئ YAML من أن يصبح مصنعًا عشوائيًا للكائنات.

يظل الاقتباس هو الاختيار المحمول عندما تبدو قيمة التكوين مكتوبة فقط. فهو يحافظ على الأصفار البادئة وتهجئة الإصدار والكلمات الحارسة دون الاعتماد على علامة واضحة موجودة في أداة أخرى. تعرض نتيجة JSON النوع المختار، ولكن لا يمكنها أن تحمل نمط الاقتباس أو العلامة التي أنتجت تلك القيمة.

ما لا يغطيه هذا — التحليل على مستوى التطبيق للنتيجة JSON، والتي قد تُجبر الأنواع مرة أخرى (على سبيل المثال، السلسلة '1' إلى رقم)

قد يفرض رمز التطبيق JSON الناتج مرة أخرى. يمكن لـ API قراءة `"1"` وتحويله إلى رقم، أو رفضه مقابل مخطط. تتوقف محولات بناء الجملة بعد إنتاج نص JSON؛ ولا يقوم بتشغيل أداة التحقق من صحة إطار العمل أو أداة تحميل متغيرة البيئة أو قاعدة العمل. وبالتالي فإن التحويل النظيف يثبت بناء الجملة ورسم الخرائط، وليس القبول من قبل الخدمة النهائية.

تعتبر مفاتيح YAML المكررة مشكلة منفصلة. ToolAcre يحتفظ بالقيمة الأخيرة ويبلغ عن المفتاح المتكرر بموضع. تصبح تدفقات المستندات المتعددة صفائف. يمكن لهذه الاختيارات أن تغير ما يراه التطبيق حتى عندما يكون كل نوع عددي متوقعًا، لذا اقرأ التحذيرات بدلاً من الحكم فقط على النص المنسق JSON.

الوجبات الجاهزة: اقتبس أي شيء قد تخطئ الآلة في قراءته - وكيف يكشف تحويل YAML إلى JSON في المتصفح بالضبط ما حل به كل مقياس

اقتبس النص الذي يشبه رمز الجهاز، ثم افحص الأنواع JSON. استخدم الصارم عندما تريد أصغر مفردات عددية على شكل JSON؛ اختر Core عمدًا عندما يكون YAML مطلوبًا للنماذج الفارغة والرقمية. لا يعد أي من الخيارين YAML 1.1، ولا يجعل أيًا منهما المستهلك يتبع نفس القواعد.

تجعل اللوحة خيار المحلل اللغوي الخاص بها مرئيًا وترجع تحذيرات للقيم التي لا يمكن أن يمثلها أي هدف. هذا هو الوعد الصادق: فهو يكشف كيف حل هذا التنفيذ كل عدد قياسي. ولا تدعي سلوك YAML العالمي أو تحتفظ بالتعليقات والعلامات والتهجئة من خلال رحلة ذهابًا وإيابًا.