العربية

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

هل JSON صالح YAML؟ ما يعد به YAML 1.2 وأين يخالفه

· خلفية

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

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

تم تصميم YAML 1.2 بحيث يكون كل JSON مستندًا أيضًا YAML مستندًا، ولهذا السبب فإن تحويل JSON إلى YAML يبدو تافهًا. يشرح هذا المنشور ما تضمنه المواصفات فعليًا وحالات الحافة التي يفشل فيها الوعد.

لصق JSON في ملف YAML والإفلات من العقاب - لماذا ينجح ذلك، والمرة الوحيدة التي لم ينجح فيها ذلك

يمكن لصق كائن JSON عادي في الجانب المصدر YAML وقراءته ضمن مخطط ToolAcre YAML 1.2 JSON. تصبح الأقواس والأقواس والمفاتيح المقتبسة والسلاسل والأرقام والقيم المنطقية والصفرية هي نفس القيمة البسيطة JavaScript. وهذا ما يفسر لماذا تبدو الحدود في كثير من الأحيان تافهة.

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

يتم تحميل JSON العادي من خلال قارئ YAML 1.2 هذا؛ تفشل الملحقات غير المدعومة لأسباب منفصلة

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

في الوضع الصارم، تظل التلدة والقيمة الفارغة و`0o755` سلاسل. هذه هي YAML الرموز المميزة JSON نفسها التي لن تحتوي عليها. يقوم Core بحلها بشكل مختلف مع الاستمرار في إرجاع الإخراج على شكل JSON.

تتماشى المخططات المشحونة مع البيانات ذات الشكل JSON دون إثبات كل حافة المواصفات

تحتفظ مفاتيح التعيين YAML المكررة بالقيمة الأخيرة مع تحذير؛ التفسير الصارم في مكان آخر قد يرفضهم. يمكن لقراء YAML 1.1 القديم كتابة كلمات مثل `NO` بشكل مختلف، بينما يحتفظ بها هذا القارئ كسلاسل. تؤدي هذه الاختلافات إلى تعقيد بيانات قابلية النقل الواسعة.

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

تظل المفاتيح المكررة واختلافات المحلل اللغوي القديم حدودًا لقابلية التشغيل البيني

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

حتى مستند YAML المدعوم يمكن تحويله إلى JSON صالح ولا يعود مطلقًا إلى نفس النص YAML. قد تستمر مساواة البيانات بالنسبة للقيم العادية بينما لا تستمر التعليقات والمثبتات والتهجئة وهوية الدفق.

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

JSON-to-YAML عادةً ما يكون تغييرًا في النمط والتسلسل للإدخال على شكل JSON. YAML-to-JSON يفسر أولاً بناء الجملة الخاص بـ YAML ثم يعرض النتيجة في نموذج القيمة الأصغر لـ JSON. الاتجاهات ليست متماثلة.

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

مثال عملي: تم تحميل مستند JSON كـ YAML — نفس البنية، ثم تمت إضافة ميزة YAML فقط لإظهار مكان توقف أدوات JSON

الصق `{"country":"NO","items":[1,null],"nested":{"ok":true}}` كإدخال YAML. القارئ الصارم يعيد نفس الشجرة. أضف تعليق YAML وتبقى القيمة كما هي أثناء اختفاء التعليق. استبدال كائن متكرر بنقطة ارتساء واسم مستعار؛ يحتوي JSON الآن على نسخ بدلاً من بناء الجملة المرجعي.

أضف `---` ومستندًا ثانيًا؛ وتصبح النتيجة مجموعة من المستندات مع تحذير. أضف `!!binary`؛ القارئ المقيد يرفض ذلك. تمثل كل خطوة حدًا مميزًا: العرض التقديمي الذي تم تجاهله، والبنية التي تم حلها، واصطلاح الدفق، والنوع غير المدعوم.

ما لا يغطيه هذا — التوافق على مستوى المخطط، حيث لا يكون لأنواع YAML مثل الطوابع الزمنية نظير JSON

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

قد يدعم تطبيق YAML آخر أنواعًا إضافية. وهذا يجعلها أقل توافقًا مع قيم JSON العادية عند تلك النقاط، وليست أفضل أو أسوأ تلقائيًا. اختر بناءً على العقد المستهدف ومتطلبات الأمان.

يتضمن التوافق على مستوى المخطط قيمًا غير محدودة وعلامات زمنية يحدها هذا القارئ المقيد أو يرفضها

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

استخدم محولات بناء الجملة لاختبار النص الفعلي وقراءة تحذيراته. تعامل مع "JSON هو YAML" كاختصار مفيد فقط بعد تسمية المحلل اللغوي والمخطط والميزات غير المدعومة التي تجعل الحدود الحقيقية دقيقة.

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