# منسِّق JSON — نسِّقه، أو اضغطه، أو حوِّله

JSON وXML وHTML وCSS وYAML، منسَّقة أو محوَّلة. ولا شيء يُلصَق في خادم أحد آخر.

> نسِّق وصغِّر JSON وXML وHTML وCSS وYAML، وحوِّل JSON إلى YAML أو XML وبالعكس. المحلِّلات تعمل في متصفحك ولا يُرفع شيء - فلا يغادر رمزٌ مميز أو ملف إعدادات جهازك أبداً.

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

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

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

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

## كيف تنسّق JSON أو تحوّله دون رفعه

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

## النسخة الأطول

[كيف تنسّق JSON دون أن تناوله لأحد](https://abox.tools/ar/أدلة/تنسيق-json-دون-رفعه/): كيف ترتّب JSON وتفحصه وتصغّره في متصفحك أنت - ما الذي لا يجوز للمنسّق أن يغيّره في ملفك أبداً، وكيف تقرأ رسالة الخطأ، ولماذا يهمّ الموقعُ الذي تلصقه فيه.

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

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

## أسئلة

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

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

### هل يغيّر تنسيقُ JSON شيئاً غير التخطيط؟

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

### ما اللغات التي يستطيع تنسيقها؟

JSON وXML وHTML وCSS وYAML. وJSON وXML وHTML وCSS يمكن عصرها مسطَّحة كذلك؛ أما YAML فلا، لأن صيغتها القصيرة هي أسلوب التدفّق، وهو غير مقروء، وغيرُ المقروء نقيضُ سبب الإبقاء على ملف بصيغة YAML. وJavaScript ليست في القائمة عن قصد — انظر السؤال عنها أدناه.

### لماذا لا ينسّق JavaScript أو Python أو SQL؟

لأن تبسيط لغة برمجة يعني تحليلها كما ينبغي، والمنسِّقُ الذي يصيب على وشك أسوأ من لا منسِّق: فهو ينتج شيفرة تبدو سليمة وتفعل شيئاً آخر. وJSON وXML وCSS وYAML قواعدها من الصغر بحيث تُقرأ يدوياً وتُفحَص باختبارات تستطيع تشغيلها. أما منسِّق JavaScript فهو Prettier، وهو ميغابايت من المحلِّل، وهو ينتمي إلى محرِّرك لا إلى صفحة ويب.

### ملف 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. والقراءةُ بصرامة والكتابةُ بتحفّظ هما التركيبة الوحيدة الصائبة في الحالين.

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

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

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

الفرقُ بين كائن فارغ ومصفوفة فارغة وسلسلة فارغة، وكلها تصير عنصراً فارغاً، ونوعُ كل قيمة، لأن XML لا أنواع فيها — ولهذا يترك التحويل العكسي كل شيء سلسلةً نصّية بدل أن يقرّر أن `8080` كان رقماً. والمصفوفة تصير عنصراً مكرَّراً، وهي الهيئة الوحيدة التي تُقرأ رجوعاً، والمفتاحُ الذي لا يستطيع اسم عنصر حمله تُستبدَل محارفُه العسيرة بدل أن يُخرَج مستنداً لن يقرأه أي محلِّل.

### هل تغيّر إعادةُ المسافة البادئة في HTML منظرَ الصفحة؟

قد تفعل، وهذا صريح في ذلك. فالفراغُ بين عنصرين مضمَّنين مسافةٌ بين كلمتين، فتحريكه ليس مجانياً. وشيئان يضبطان ذلك: `<pre>` و`<textarea>` يُنسَخان كما كانا بالضبط، والعنصرُ الذي لا يحمل إلا نصّاً يبقى في سطر واحد. وكلُّ ما عدا ذلك يُبسَط.

### ما أكبر ملف يستطيع التعامل معه؟

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

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

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

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

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

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

- **ليس لما تلصقه مكان يذهب إليه.** تُسمّي Content-Security-Policy كل عنوان يجوز لهذه الصفحة الاتصال به، وليس واحد منها لنا. فلا يوجد هنا طرفٌ يُجمَع عنده رمزٌ مميز ملصوق، ولا في الشيفرة ما يرسله إليه لو وُجد.
- **لا شيء هنا يجلب شيئاً.** لا يوجد `fetch` ولا `XMLHttpRequest` ولا `sendBeacon` في أي موضع من `src/`. وكلُّ محلِّل وكلُّ كاتبٍ دوالُّ في هذه الصفحة تأخذ سلسلة وتعيد سلسلة.
- **المنسِّقات تُبقي على ما أُعطِيته.** كائنُ JSON يعود ومفاتيحه بالترتيب الذي كتبتها به وأرقامُه مكتوبة كما كتبتها، لأن `src/shared/parse-json.js` محلِّلٌ لا استدعاءٌ لـ `JSON.parse`، وهي تعيد ترتيب المفاتيح الشبيهة بالأعداد الصحيحة وتحوّل معرّفاً من عشرين رقماً إلى أقرب عدد عائم مضاعف. والاختبارات في `tests/js/text-format.test.js` تفحص ذلك بالضبط.
- **ما تُحمّله Google، وما لا يُعطى لها.** نصوص الإعلانات والقياس تأتي من Google، وزر التبرّع من Buy Me a Coffee. ولا يُعطى أيٌّ منها محرفاً واحداً من نصّك. وكل سطر يقرؤه أو يحلّله أو يكتبه يُخدَم من هذا الأصل نفسه ومُدرَج في المستودع.
- **يعمل دون اتصال.** اقطع الاتصال بالشبكة، وتبقى الأداة كما هي، لأنه لم تكن فيها خطوة شبكية قط. وهذا أبسط برهان على الإطلاق.

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

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