# من YAML إلى JSON — ومن JSON عودةً إلى YAML

الاتجاهان معاً، ويقول لك ثمن كلّ منهما. ولا شيء من ذلك يُلصَق في خادوم أحد آخر.

> حوّل YAML إلى JSON وJSON إلى YAML في متصفّحك. يقرأ YAML 1.2، فتبقى yes وno نصوصاً، ويقول بالضبط ما يفقده كلّ اتجاه. لا يُرفع شيء، فلا يغادر ملفُّ إعدادات جهازك أبداً.

هذه الصفحة أداة تفاعلية تعمل بالكامل داخل متصفحك، على العنوان https://abox.tools/ar/تحويل-yaml-الى-json/ — ولا يُرفَع أي شيء تعطيه إياها. وفيما يلي كل ما تقوله الصفحة عن الأداة بالكلمات؛ لاستخدامها، افتح العنوان.

## ملفات YAML وJSON الخاصة بك لا تُرفع **أبدا**. لا يوجد خادم.

التحويل حسابٌ على سلسلة نصية، يجري هنا، في هذه الصفحة. والمحلّلان مكتوبان باليد ويقعان في `src/` — `shared/parse-yaml.js` و`shared/parse-json.js` — وليس هناك سواهما. ولهذه الأداة لا وظيفة شبكية من أي نوع — لا شيء يُجلَب ولا شيء يُرسَل — وذلك يزن هنا أكثر مما يزن في أي موضع آخر من هذا الموقع تقريباً: فملفّ YAML هو في الغالب إعداد نشر، وإعداد النشر مليء في الغالب بأسماء مضيفات وأسماء دِلاء وأسرار.

- ✗ بلا رفع
- ✗ بلا حساب
- ✗ بلا حدّ للحجم
- ✓ يعمل دون اتصال
- ✓ مفتوح المصدر

## كيف تحوّل YAML إلى JSON دون رفعه

1. **اختر الاتجاه.** *من YAML إلى JSON* أو *من JSON إلى YAML*. والملاحظة تحت القائمة تقول ما يفقده ذلك الاتجاه قبل أن تلصق شيئاً، لا بعده.
2. **الصقه، أو أفلِت الملف.** كلّ ما يمكنك تحديده ونسخه يصلح. والملف الذي تُفلته على المُنتقي يقرؤه متصفّحك أنت ويضعه في الصندوق — ولا توجد خطوة رفع حتى تُترَك — وامتداد `.json` أو `.yaml` يضبط لك الاتجاه كذلك.
3. **اختر الإزاحة.** مسافتان أو أربع أو مسافة جدولة. ولا تُعرَض مسافة الجدولة إلا لـ JSON: فـ YAML معرَّف بالمسافات، ومسافة الجدولة ليست إزاحةً مشروعة فيه.
4. **اقرأ الخطأ حيث هو.** المحلّل الذي يفشل هنا يقول ما وجده وفي أي سطر وأي عمود، بدل «رمز غير متوقّع عند الموضع 4193». وذلك يكفي عادةً لإصلاح ملفّ إعدادات دون فتح شيء آخر.
5. **خذ النتيجة.** انسخها، أو نزّلها ملفاً باسم الصيغة التي خرجت بها.

## أيضا في الصندوق

- [مُنسّق XML](https://abox.tools/ar/تنسيق-xml/): ‏XML منشور ليُقرأ أو مضغوط ليُرسَل، ومحوَّل إلى JSON في الاتجاهين. ولا شيء من ذلك يُلصَق في خادوم أحد آخر.
- [مقارن النصوص](https://abox.tools/ar/مقارنة-النصوص/): نصّان يدخلان، وكل فرق يخرج معلَّماً، سطراً سطراً وكلمةً كلمة. ولا شيء يُلصَق في خادم أحد آخر.
- [مرمِّز Base64 ومفكِّكه](https://abox.tools/ar/ترميز-base64/): Base64 والترميز المئوي وكيانات HTML والسداسي عشري وهروبات الشرطة المائلة العكسية، في الاتجاهين. ولا شيء يُلصَق في خادم أحد آخر.
- [مشاركة النص والملفات](https://abox.tools/ar/مشاركة-النص/): المشاركة تعيش في هذا التبويب المفتوح وحده. يستلمها القراء مشفّرة من متصفحك مباشرة، وإغلاق التبويب ينهيها - لا يحتفظ أي خادم بأي شيء.

## أسئلة

### هل يُرفع ملف YAML الخاص بي إلى أي مكان؟

لا. المحلّلان والطابعان في هذه الصفحة دوالُّ تعمل في متصفّحك أنت، على عتادك أنت. ولهذه الأداة لا وظيفة شبكية من أي نوع — فهي لا تجلب شيئاً أبداً ولا ترسل شيئاً أبداً — وتسمّي `Content-Security-Policy` الخاصة بالصفحة كلّ عنوان يجوز لها الاتصال به، وليس منها واحد لنا. وهذا هو سبب استعمالها مع إعداد نشر بالذات: فتلك الملفات مليئة بأسماء المضيفات وأسماء الدِلاء، وأحياناً بسرٍّ نوى أحدهم نقله، ولصق واحدٍ منها في محوّل شخصٍ آخر إعطاؤه له.

### ماذا يُفقَد عند تحويل YAML إلى JSON؟

التعليقات، لأن JSON ليس لديه أين يضعها. أما المراسي والكُنى والوسوم فتُرفَض صراحةً بدل أن تُخمَّن — كلٌّ منها يقول شيئاً لا يستطيع JSON قوله، ومحوّلٌ يختار في صمت تأويلاً كان سيسلّمك مستنداً ليس هو ما قاله الملف. أما الاتجاه الآخر فلا يفقد شيئاً: فكلّ مستند JSON هو أصلاً مستند YAML.

### ملفّي يقول no وخرج JSON نصاً. لماذا؟

لأنه نصّ فعلاً، ولأن هذا يقرأ YAML 1.2 لا 1.1. ففي YAML 1.1 كانت `yes` و`no` و`on` و`off` قيماً منطقية، وتلك هي العلّة الشهيرة التي تحوّل رمز النرويج إلى `false`. وقد تخلّى YAML 1.2 عن ذلك، وتخلّى هذا عنه كذلك: فلا يُقرأ شيء على أنه غير نصّ سوى `true` و`false` و`null` و`~`. وفي الاتجاه الآخر تُكتَب تلك الكلمات *بين علامتَي اقتباس*، مع أن هذا كان سيقرؤها نصاً بدونهما — لأن ما سيفتح الملف بعد ذلك قد لا يفعل. ولا يزال PyYAML يفترض 1.1 افتراضياً. والقراءة بصرامة والكتابة بتحفّظ هما التركيبة الوحيدة الصحيحة في الاتجاهين.

### هل يحافظ على ترتيب مفاتيحي؟

نعم، في الاتجاهين، وهذا أصعب مما يبدو. فمحوّلٌ مبنيّ على `JSON.parse` ينقل في صمت المفاتيح التي تشبه الأعداد الصحيحة إلى المقدّمة، فيعود `{"10":a,"2":b}` على هيئة `{"2":b,"10":a}`. وتحتفظ الأعداد بالأرقام التي كتبتها، فلا يفقد معرّفُ حسابٍ من عشرين رقماً أرقامَه الثلاثة الأخيرة لصالح عددٍ عشري مضاعف. وإن *أردتها* مرتَّبة فهناك خانة اختيار، وهي ترتّب بحسب طريقة قراءة المفاتيح لا بحسب نقاط ترميزها.

### هل يستطيع تحويل عدّة مستندات YAML دفعةً واحدة؟

لا، ويقول ذلك بدل أن يختار واحداً. فالملف الذي فيه فواصل `---` يحمل أكثر من مستند، وليس لدى JSON شكلٌ يعني «عدّة مستندات» — والمصفوفة ستكون دعوى لم يدّعِها الملف قط. حوّلها واحداً تلو الآخر.

### لماذا لا يوجد هنا منسّق YAML؟

لأن YAML ليس له صورة مضغوطة تستحقّ الكتابة — القصيرة هي أسلوب التدفّق، وهو غير مقروء، وعدم القراءة نقيض السبب الذي من أجله يُحتفَظ بملفٍّ بصيغة YAML أصلاً. أما نشر JSON وXML وHTML وCSS فهو عمل [مُنسّق JSON](https://abox.tools/ar/تنسيق-json/)، وهو ينشر YAML أيضاً.

### ما حجم الملف الذي يستطيع التعامل معه؟

لا حدّ موضوع هنا، لأنه لا خادوم يدفع ثمنه. السقف العملي هو جهازك أنت: بضعة ميغابايتات من YAML تمرّ على ما يرام، ومع مستند طويل جداً تنتظر الصفحة توقّفاً في كتابتك قبل أن تحوّل، بدل أن تنازعك لوحة المفاتيح.

### هل هو مجاني، وهل أحتاج إلى حساب؟

هو مجاني، ولا حساب ولا تسجيل دخول ولا فترة تجريبية ولا حدّ لما تلصقه. يحمل الموقع إعلانات، وهي ما يدفع تكاليفه؛ ولا تُعطى تلك الإعلانات شيئاً عن نصّك.

### هل يعمل دون اتصال؟

نعم. حمّل الصفحة مرة واحدة، ثم افصل الإنترنت وستظلّ تعمل. وهذه أيضاً أبسط طريقة لإثبات أن شيئاً لا يُرفَع: فأداة ترسل إعدادك بعيداً لتحويله كانت ستتوقّف في اللحظة التي تفصل فيها.

## كيف يمكن التحقق من وعد الخصوصية

- **ما تلصقه ليس له مكان يذهب إليه.** تسمّي Content-Security-Policy كلّ عنوان يجوز لهذه الصفحة الاتصال به، وليس منها واحد لنا. لا توجد هنا نقطة نهاية يمكن أن يُجمَع عندها إعدادٌ ملصوق، ولا في الشيفرة ما يرسله إليها لو وُجدت.
- **لا شيء هنا يجلب شيئاً.** ليس في `src/` كلّه `fetch` ولا `XMLHttpRequest` ولا `sendBeacon`. والمحلّلان والطابعان دوالُّ في هذه الصفحة تأخذ سلسلة نصية وتعيد سلسلة نصية.
- **يقرأ YAML 1.2، فتبقى النرويج هي النرويج.** في YAML 1.1 كانت `no` قيمةً منطقية، وتلك هي العلّة الشهيرة التي تحوّل رمز النرويج إلى `false`. وهذا يقرأ 1.2، حيث تكون النصّ الذي تبدو عليه. وفي الاتجاه الآخر تُكتَب تلك الكلمات *بين علامتَي اقتباس*، لأن ما سيفتح الملف بعد ذلك قد يظلّ قارئ 1.1. `tests/js/text-convert.test.js` يتحقّق من النصفين.
- **التحويل الذي لا يستطيع أن يكون أميناً يتوقّف بدل ذلك.** مرساةٌ أو كنيةٌ أو وسمٌ في YAML ينهي التحويل برسالة تقول في أي سطر يقع، بدل مستند JSON يعني في صمت شيئاً آخر. فليس لدى JSON طريقة ليقول «العقدة نفسها مرّتين»، واختيار تأويلٍ اختيارٌ بالنيابة عنك.
- **ما تحمّله Google، وما لا يُعطى لها.** تأتي نصوص الإعلانات والقياس من Google، وزرّ التبرّع من Buy Me a Coffee. ولا يُسلَّم أيٌّ منها حرفاً من نصّك. وكلّ سطر يقرؤه أو يحلّله أو يكتبه يُقدَّم من هذا الأصل ومُدرَج في المستودع.
- **يعمل دون اتصال.** افصل الشبكة وتبقى الأداة كما هي، لأنه لم تكن فيها خطوة شبكية أصلاً. وهذا أبسط برهان على الإطلاق.

**تحقّق بنفسك.** لا شيء مما سبق عليك تصديقه دون تحقق. تُولَّد هذه الصفحة من القوالب والإعدادات في المستودع بواسطة سكربت بناء يمكنك قراءته وتشغيله بنفسك، والنتيجة موجودة في فرع `dist` — فقارِن إذن بين ما يُقدَّم فعلا وما ينتجه بناء المصادر: https://github.com/A-Box-of-Tools/website

الملفات الجديرة بالقراءة أولا هي `config/site.toml` من أجل سياسة أمان المحتوى (Content-Security-Policy)، و`src/shared/parse-yaml.js` للقارئ الذي يرفض مرساةً بدل أن يخمّن ما كانت تعنيه، و`src/convert.js` لسبب كون التحويل محلّلاً وطابعاً فحسب، دون شيء بينهما يعرف الصيغتين معاً.
