شيفرة هذه الصفحة لم تبدأ العمل.

فتح index.html مباشرة من مجلد يمنع المتصفح من تحميل وحدات JavaScript، فلا يحدث شيء عند اختيار ملف. قدّم المجلد عبر HTTP بدلا من ذلك:

powershell -ExecutionPolicy Bypass -File serve.ps1

ثم افتح http://localhost:8080/.

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

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

اللغة: العربية
عرض الشيفرة المصدرية
نصوصك وشيفراتك لا تُرفع أبدا. لا يوجد خادم.

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

فحص حي: جارٍ الفحص…

دون اتصال: جارٍ الفحص…

لا داعي لأن تصدّقنا: افتح أدوات المطوّر، وراقب تبويب «الشبكة»، ثم نسِّق شيئاً. لن يحمل أي طلب محرفاً واحداً مما لصقته. أو اقطع الاتصال بالإنترنت ونسِّقه رغم ذلك.

1 اختر العمل

اللغة التخمين موضع بداية لا غير، وتصحيحُه نقرةٌ واحدة.

رتّب مفاتيح كل كائن بحسب قراءة المفاتيح لا بحسب نقاط الترميز، فتأتي item2 قبل item10. ولـ JSON وحدها.

اسمٌ للعنصر الخارجي XML لها عنصر واحد في الأعلى وJSON ليس لها، فلا بدّ من اختراع واحد.

2 الصقه

فارغ

3 خذ الناتج

لا شيء بعد.

 

عرض بصيغة Markdown

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

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

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

كيف تنسّق JSON دون أن تناوله لأحد كيف ترتّب JSON وتفحصه وتصغّره في متصفحك أنت - ما الذي لا يجوز للمنسّق أن يغيّره في ملفك أبداً، وكيف تقرأ رسالة الخطأ، ولماذا يهمّ الموقعُ الذي تلصقه فيه.

أسئلة

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

لا. كلُّ محلِّل وكلُّ كاتبٍ على هذه الصفحة دالّةٌ تعمل في متصفحك أنت، على جهازك أنت. وليست لهذه الأداة وظيفة شبكية من أي نوع — فهي لا تجلب شيئاً ولا ترسل شيئاً أبداً — و 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 لا بأس بها، وفي المستند الطويل جداً تنتظر الصفحة هدأةً في كتابتك قبل أن تعيد التنسيق، بدل أن تنازعك على لوحة المفاتيح.

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

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

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

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