أدوات يامل · 60دقيقة قراءة
YAML إلى JSON: تحويل التكوينات دون أن تفقد عقلك
يستغرق تحويل YAML إلى JSON ثانيتين حتى لا يصبح كذلك: علامة تبويب شاردة، أو مفتاح مكرر، أو مستند ثانٍ مخفي خلف علامة `---` يحول التحويل النظيف إلى خطأ صامت في فقدان البيانات. يغطي هذا الدليل ما يجب أن يفعله لك تحويل YAML إلى JSON الجيد، وأوضاع الفشل المحددة التي تستحق التحقق منها قبل شحن المخرجات إلى أي مكان.
تم التحديث
ما الذي يفعله تحويل YAML إلى JSON بالفعل
يصف YAML وJSON نفس الأشكال - الخرائط، والقوائم، والسلاسل، والأرقام، والقيم المنطقية، والقيمة الخالية - وبالتالي فإن التحويل في الغالب يتعلق بإعادة تسلسل بناء جملة واحد مثل الآخر. ما يتغير هو السطح: تصبح المسافة البادئة أقواسًا، وتختفي التعليقات، وتصبح نقاط الارتساء نسخًا، وتنهار السلاسل متعددة الأسطر في هروب `\n`. كل واحدة من هذه التحويلات تكون فاسدة بطريقة مهمة، ولهذا السبب فإن خطوة التحويل تستحق القيام بها بشكل متعمد بدلاً من التعامل معها كفكرة لاحقة للتنسيق.
السبب العملي للتحويل هو أن JSON هو ما تريده الأداة التالية. يقبل Kubernetes YAML، لكن خطوط أنابيب `kubectl` وjq واستدعاءات API وJavaScript جميعها تتحدث لغة JSON بشكل أكثر راحة. التحويل مرة واحدة، بشكل صحيح، يتفوق على التحرير اليدوي لتنسيقين بالتوازي.
مستند متعدد YAML: مشكلة المستند الأول الصامتة
يمكن أن يحتوي الملف YAML على عدة مستندات مفصولة بـ `---`. تقوم معظم المحولات بإرجاع الأول بهدوء وتتخلص من الباقي - لذلك تصبح حزمة البيان مع النشر والخدمة وConfigMap كائنًا واحدًا بدون تحذير. يؤدي التحويل الصحيح إما إلى إصدار مجموعة من المستندات أو يسألك صراحةً عن الوثيقة التي تريدها. إذا لم يقدم المحول مثل هذا التحكم، فهو يفقد البيانات.
يجب أن تشير الأخطاء إلى السطر والعمود
إن تسامح YAML مع المسافات البيضاء هو بالضبط سبب صعوبة اكتشاف الأخطاء الصغيرة. علامات التبويب غير قانونية للمسافات البادئة، والنقطتان المفقودتان تحولان التعيين إلى سلسلة، ويتم قبول المفاتيح المكررة من قبل بعض المحللين ورفضها من قبل الآخرين. عند فشل التحويل، تقوم الرسالة المفيدة الوحيدة بتسمية السطر والعمود وإظهار المقتطف المخالف:
spec:
containers:
- name: web # tab used for indentation
error: line 3, column 0 — tabs cannot be used for indentation
تعتبر المفاتيح المكررة حالة خطيرة: عادةً ما يحتفظ موزعو YAML بالقيمة الأخيرة ولا يقولون شيئًا. إذا ظهرت `النسخ المتماثلة: 3` مرتين، فإن JSON الذي تحصل عليه يبدو صالحًا تمامًا - والرقم خاطئ.
نقلا عن القواعد التي تنجو من الرحلة
JSON أكثر صرامة فيما يتعلق بالسلاسل من YAML، لذلك تضيف التحويلات علامات اقتباس حول القيم التي كانت مجردة. هذا أمر طبيعي، ولكن اثنين من مراوغات YAML تسبب أخطاء حقيقية: `yes` و`no` و`on` و`off` هي قيم منطقية في YAML 1.1 ولكن السلاسل في دلالات JSON والقيم ذات الصفر البادئ مثل الرموز البريدية وأرقام الهواتف تفقد الصفر عند معاملتها كأرقام. إذا كان يجب أن يظل الحقل عبارة عن سلسلة عبر التحويل، فاقتبسه في المصدر.
قم بتشغيله محليًا، خاصة لتكوينات المجموعة
تحمل بيانات Kubernetes بشكل روتيني بيانات الاعتماد`Secret`الكائنات وسلاسل الاتصال في ConfigMaps والرموز المميزة في ملفات CI. يؤدي لصقها في خدمة ويب إلى تسليمها إلى خادم لا تتحكم فيه.يقوم المحول القائم على المتصفح بإجراء التحليل والتسلسل في نفس علامة التبويب التي تقرأها، لذلك لا يتم نقل أي شيء - والصفحة التي تستمر في العمل مع قطع الشبكة هي دليل على ذلك وليس وعدًا.
سير عمل معقول
- تحقق من صحة YAML أولاً وقم بإصلاح أي سطر وعمود ومقتطف تم الإبلاغ عنه.
- اختر كيفية التعامل مع ملفات المستندات المتعددة - مصفوفة، أو مستند محدد.
- قم بالتحويل باستخدام المسافة البادئة التي تطابق نمط قاعدة التعليمات البرمجية لديك (2 أو 4 مسافات)، وقم بفرز المفاتيح إذا كنت تقوم باختلاف الإخراج.
- احتفظ بـ YAML كمصدر للحقيقة في git وتعامل مع JSON على أنه قطعة أثرية تم إنشاؤها؛ التعليقات تعيش فقط في YAML.
YAML إلى JSON — الأسئلة المتداولة
هل يؤدي تحويل YAML إلى JSON إلى فقدان التعليقات؟
نعم. لا يحتوي JSON على صيغة تعليق، لذلك يتم إسقاط كل تعليق أثناء تحويل YAML إلى JSON. هذا هو السبب الرئيسي وراء احتفاظ الفرق بـ YAML كتنسيق مؤلف وإعادة إنشاء JSON كمخرج بناء بدلاً من العكس.
لماذا يفشل YAML مع رسالة مسافة بادئة فقط؟
المسافة البادئة هي هيكل YAML. إن حرف علامة التبويب، أو مسافة واحدة خارج مكانها، أو وجود مسافة بادئة للمفتاح بمستوى واحد عميق جدًا، كلها تغير معنى المستند، لذلك يتوقف المحللون عند أول غموض. الحل هو قراءة السطر الذي تم الإبلاغ عنه مع المقتطف ومقارنته بالسطر أعلاه.
هل يعتبر محول YAML إلى JSON في المتصفح آمنًا لأسرار Kubernetes؟
يحدث ذلك عندما يتم تشغيل التحويل بالكامل في الصفحة. يقوم محول YamlBox بالتوزيع محليًا باستخدام مكتبة YAML المجمعة، ولا يقوم بإجراء مكالمات شبكة، ويستمر في العمل مع تعطيل الشبكة - لذلك لا يترك البيان السري علامة التبويب أبدًا.
الأدوات المذكورة في هذه التدوينة
المزيد من المقالات للقراءة
50دقيقة قراءة
JSON إلى YAML: جعل مخرجات الجهاز قابلة للقراءة مرة أخرى
قم بتحويل JSON إلى YAML في المتصفح باستخدام المسافة البادئة وعناصر التحكم في الاقتباس - وتعرف على مصائد الاقتباس التي تحول التكوين النظيف إلى تكوين معطل.
60دقيقة قراءة
منسق JSON: جميل ومصغر وصالح بالفعل
منسق JSON يقوم بالطباعة الجميلة والتصغير والتحقق من صحة مواقع الأخطاء الدقيقة - بالإضافة إلى الأخطاء النحوية الخمسة وراء كل خطأ JSON غير صالح تقريبًا.
60دقيقة قراءة
JSON diff: مقارنة البيانات بالطريقة التي تم تنظيمها بها بالفعل
قارن حمولتي JSON مع فرق JSON الهيكلي الذي يتجاهل ترتيب المفاتيح والمسافات البيضاء، ويسلط الضوء على القيم المنقولة، ويوضح سبب تضليل فروق النص.
- مقال أطول للقراءة: YAML مقابل JSON: متى يتم استخدام أي (وكيفية التحويل)
- مقال أطول للقراءة: Kubernetes YAML إلى JSON: الدخول والنشر