أدوات المطور · محولات بناء الجملة
YAML الميزات المفقودة في تحويل JSON: التعليقات والمثبتات والعلامات
· كيف يعمل
yaml json تنسيقات البيانات
YAML يحتوي على التعليقات والمثبتات والأسماء المستعارة ومفاتيح الدمج والعلامات وتدفقات المستندات المتعددة؛ JSON لا يحتوي على أي منها. يشرح هذا المنشور ما يفعله المحول مع كل منهما ولماذا لا يؤدي التحويل مرة أخرى إلى استعادة الملف الأصلي أبدًا.
عاد الملف لفترة أطول وبدون تعليق واحد - تم تحويل تكوين YAML إلى JSON ثم عاد، وكل شيء لم ينجو
يمكن أن يعود الملف YAML من JSON لفترة أطول حتى بعد اختفاء كل تعليق. يتم تحويل نقاط الارتساء التي تشترك في تعيين واحد إلى بيانات كائن متكررة، لذلك يكتب المُسلسِل كل نسخة بشكل مستقل. ربما تظل القيم متفقة، لكن بنية التأليف والتفسير قد اختفتا.
ولهذا السبب يجب الحكم على رحلة الذهاب والإياب من YAML إلى JSON إلى YAML على أنها تحويل بيانات، وليس الحفاظ على المصدر. ToolAcre يقرأ الرسم البياني للقيمة المقيدة ويكتب مستندًا جديدًا. ولا يحتفظ أبدًا بشجرة بناء جملة محددة تحتوي على تعليقات أو أسماء مرساة أو اختيارات اقتباس أو عرض تقديمي بكميات كبيرة.
التعليقات - لماذا لا يوجد مكان في JSON ويختفي كل سطر # بعد التحويل
يتم تجاهل التعليقات بواسطة المحلل اللغوي YAML لأن JSON ليس لديه عقدة تعليق. يمكن للسطر الذي يبدأ بـ `#` أن يوضح سبب وجود المهلة أو من يملك الخدمة؛ بمجرد إزالتها، لا يمكن لأي خوارزمية استنتاج الصياغة أو الموضع. يؤدي التحويل مرة أخرى إلى إنشاء YAML صالح بدون هذا السياق التشغيلي.
احتفظ بالملف الأصلي في التحكم في الإصدار وراجع الاختلافات قبل استبداله. إذا كان الهدف هو فحص القيم التي تم حلها فقط، فسيكون JSON مفيدًا. إذا كان الهدف هو إعادة التنسيق مع الاحتفاظ بالتعليق، فإن محول القيمة العام هذا يمثل تمثيلاً خاطئًا.
المراسي والأسماء المستعارة - تم توسيع &default و*default إلى نسخ متكررة، وكيفية نمو الملف نتيجة لذلك
يتم قبول نقاط الارتساء والأسماء المستعارة ضمن حدود الأمان، ثم يتم حلها. `base: &b {x: 1}` و`copy: *b` يصبحان مسارين للكائن يحتويان على `x: 1`. يستخدم الإخراج YAML `noRefs`، لذا لا تؤدي هوية الكائن المشتركة إلى إنشاء نقاط ارتساء جديدة. لقد انتهت العلاقة المدمجة حتى مع بقاء القيم المتكررة.
تم رفض الأسماء المستعارة العودية لأن JSON لا يمكنه التعبير عن الدورات. يقتصر توسيع الاسم المستعار على عدد الأسماء المستعارة والتداخل وقياس العقدة الموسعة؛ تم إيقاف مستند قصير من شأنه أن يصل إلى أكثر من مليون قيمة. يؤدي هذا إلى حماية علامة التبويب دون المطالبة بالدعم التعسفي YAML.
دمج المفاتيح - الاصطلاح <<: من YAML 1.1، وكيف يقوم المحللون الذين يدعمونه بتسوية التعيين المدمج، وما يحدث في المفاتيح التي لا تدعمه
يفترض المخطط التفصيلي أن YAML 1.1 مفاتيح الدمج مسطحة. يقوم ToolAcre بتحميل JSON أو المخطط الأساسي لـ js-yaml فقط، ولا يتيح أي منهما نوع الدمج. ضمن هذه المخططات، يكون المفتاح `<<` عبارة عن بيانات عادية وليس تعليمات لدمج التعيينات. وبالتالي فإن تقديم دمج مسطح كسلوك مشحون سيكون خطأً.
إذا كان المصدر الخاص بك يعتمد على دلالات مفتاح الدمج، فقم بحلها في التطبيق الذي يمتلك تلك الاتفاقية أو أعد كتابة القيم بشكل صريح قبل التحويل. قد يستمر تحليل الاسم المستعار المستخدم كقيمة عادية `<<` إلى كائن، ولكن يظل المفتاح `<<`؛ وهذا لا يعادل دمج أعضائها في الأصل.
لا يتم تمكين مفاتيح الدمج بواسطة المخططين المقيدين اللذين يأتيهما هذا المحول
يمكن للعلامات الصريحة القياسية التي تم التعرف عليها بواسطة المخطط المقيد اختيار الأنواع الأساسية، مثل `!!str` أو `!!int`. يتم رفض العلامات المخصصة والأكثر ثراءً - بما في ذلك العلامات الثنائية والطابع الزمني والمجموعة والخريطة المرتبة ووظيفة JavaScript ومنشئات كائنات Python. لم يتم تقييدها ولا يتم تنفيذها أبدًا.
يتم قبول الدفق YAML المفصول بـ `---`. وثيقة واحدة تصبح قيمة واحدة؛ يصبح العديد منها مصفوفة مع تحذير يشير إلى عدد المستندات. يمكن للفاصل اللاحق إنشاء مستند نهائي فارغ وفقًا للمخطط المحدد. لا يوجد هدف هنا لديه نموذج دفق، لذا فإن المصفوفة عبارة عن اصطلاح معلن.
يتم رفض العلامات غير الآمنة؛ تصبح تدفقات المستندات المتعددة صفائف
استخدم `defaults: &d` مع إعادة المحاولة والمهلة، وتعليقًا يشرح المهلة، ثم `service:` مع `inherited: *d`. JSON يحتوي على كلا من الإعدادات الافتراضية والكائن الموروث المتكرر؛ التعليق واسم المرساة غائبان. يؤدي تحويل JSON مرة أخرى إلى إصدار تعيينين بدلاً من علاقة ربط.
أضف `---` متبوعًا بمستند آخر ويصبح الجذر JSON مصفوفة من المستندات. أضف `!!binary` وسيتوقف التحويل مع تلميح مخطط مقيد. تميز هذه التغييرات الثلاثة بين البيانات المدعومة التي تم حلها والتقليد الهيكلي والبناء غير المدعوم تمامًا.
ما لا يغطيه هذا هو ترتيب المفاتيح وأسلوب عرض الأسعار، والذي عادةً ما يظل موجودًا ولكن غير مضمون بواسطة أي من التنسيقين
غالبًا ما يظل ترتيب إدراج الكائنات العادي مرئيًا، ولكنه ليس الحفاظ على نمط المصدر، كما يؤدي تحديد مفاتيح الفرز إلى تغييره عمدًا. الاقتباسات وأسلوب التدفق مقابل أسلوب الكتلة والتهجئة العددية والتعليقات لا تنجو. تحتفظ مفاتيح التعيين المكررة بالقيمة الأخيرة مع تحذير بدلاً من الاحتفاظ بالإدخالين غير الصالحين.
يحمي الكاتب السلاسل الغامضة من خلال اقتباس القيم التي قد يخطئ المستهلك في قراءتها YAML 1.1، ولكن اختيار الأمان هذا يمكن أن يختلف عن أسلوب المؤلف الأصلي. إن مساواة البيانات هي الاختبار الذي يمكن الدفاع عنه للقيم العادية ذات الشكل JSON؛ المساواة النصية ليست كذلك.
قد يظل ترتيب المفاتيح قائمًا، بينما لا يتم الاحتفاظ بالتعليقات والمثبتات وتهجئة العلامات والأسلوب
YAML-to-JSON يفقد المعنى عندما يكون المعنى موجودًا خارج القيمة التي على شكل JSON: التعليقات، والأسماء المستعارة، والعلامات غير المدعومة، وحدود الدفق على هذا النحو، والأسلوب. ToolAcre يجعل العديد من الخسائر مرئية ويرفض التركيبات الخطرة أو الدورية بدلاً من التظاهر بالحفاظ عليها.
قم بتحويل ملف تمثيلي قبل اعتماد سير العمل. افحص التحذيرات والقيم التي تم حلها واحتفظ بالمؤلف YAML. تعتبر اللوحة بمثابة عدسة ممتازة لما يراه المحلل اللغوي، ولكنها ليست محررًا يحتفظ بالتعليقات أو محولًا كاملاً لنموذج الكائن YAML.
بالنسبة لمراجعة الترحيل، قم بفصل تغييرات القيمة عن تغييرات المصدر فقط. يمكن للمقارنة العميقة JSON أن تحدد ما إذا كانت القيم العادية قد بقيت أم لا، بينما يكشف اختلاف النص عن التعليقات والمثبتات والأسلوب الذي تغير بالضرورة. ولا يحل أي من الشيكين محل الآخر. إن استدعاء مقارنة القيمة بلا فقدان سيؤدي إلى تجاهل معلومات المصدر؛ سيؤدي استدعاء كل تغيير نصي إلى فشل البيانات إلى تجاهل عملية إعادة التسلسل الصالحة.