منسق JSON والتحقق من صحته
الصق JSON لتنسيقه بشكل مقروء أو تصغيره أو ترتيب مفاتيحه. وإذا تعذّر تحليله، يعرض المنسق السطر والعمود اللذين توقف عندهما المحلل، مع مؤشر أسفل موضع المشكلة، فيصبح العثور على فاصلة ناقصة في استجابة من 3,000 سطر مسألة ثوانٍ.
0 حرف · 0 كلمة · 0 سطر
0 حرف · 0 كلمة · 0 سطر
تعمل الأداة بالكامل داخل تبويب المتصفح هذا. لا يتم رفع نصك ولا حفظه.
أنواع قيم JSON
يسمح RFC 8259 بهذه القيم فقط. الكائنات والمصفوفات يمكن تداخلها، وكل ما عداها قيم نهائية.
| النوع | مثال | القاعدة |
|---|---|---|
| كائن | {"id": 7, "tags": ["a"]} | يجب أن تكون المفاتيح سلاسل بين علامتي اقتباس مزدوجتين، وتُفصل العناصر بفواصل دون فاصلة زائدة في النهاية. |
| مصفوفة | [1, "two", null] | قائمة مرتبة من أي قيم، ويُسمح بخلط الأنواع. |
| سلسلة نصية | "caf\u00e9 \"quoted\"" | علامات الاقتباس المزدوجة فقط؛ يجب تهريب أحرف التحكم؛ وتستخدم تهريبات \u أربعة أرقام سداسية عشرية. |
| رقم | -12.5e3 | عشري فقط: علامة سالب اختيارية، بلا أصفار بادئة، مع كسر وأس اختياريين. لا NaN ولا Infinity. |
| true وfalse وnull | true | بأحرف صغيرة ودون علامات اقتباس. |
ما يرفضه المحلل
مُرّر كل إدخال أدناه إلى JSON.parse نفسه الذي يستخدمه المنسّق عند بناء هذه الصفحة.
| الإدخال | المشكلة | JSON.parse |
|---|---|---|
{"a": 1,} | فاصلة زائدة | مرفوض |
{'a': 1} | سلاسل بعلامات اقتباس مفردة | مرفوض |
{"a": 1 /* note */} | تعليقات | مرفوض |
{a: 1} | مفتاح بلا علامات اقتباس | مرفوض |
{"n": NaN} | NaN ليس رقمًا في JSON | مرفوض |
{"n": 012} | صفر بادئ | مرفوض |
{"n": 0x1F} | رقم سداسي عشري | مرفوض |
التهريب في سلاسل JSON
| الحرف | الكتابة في JSON |
|---|---|
| علامة اقتباس مزدوجة | "\"" |
| شرطة مائلة عكسية | "\\" |
| سطر جديد | "\n" |
| علامة جدولة | "\t" |
| رجوع إلى بداية السطر | "\r" |
| حرف التحكم U+0001 | "\u0001" |
| شرطة مائلة (التهريب اختياري) | "/" |
| حرف غير ASCII (لا يحتاج إلى تهريب) | "é" |
القواعد التي يتبعها مستند JSON صالح
يحدد المعيار RFC 8259 صيغة JSON (وهو مطابق في جوهره لـ ECMA-404). المستند عبارة عن قيمة واحدة: كائن، أو مصفوفة، أو نص، أو رقم، أو true، أو false، أو null. مفاتيح الكائن نصوص دائمًا وتُكتب بين علامتي اقتباس مزدوجتين. تستخدم النصوص علامات الاقتباس المزدوجة فقط، ويجب تهريب علامة الاقتباس والشرطة المائلة العكسية وكل محرف تحكم أقل من U+0020؛ لذلك تُكتب علامات التبويب وفواصل الأسطر داخل النص على الصورة \t و\n. كما يشترط RFC 8259 استخدام ترميز UTF-8 عند تبادل JSON بين الأنظمة.
الأرقام عشرية: بلا أصفار بادئة، ولا نظام ست عشري، ولا NaN أو Infinity، ولا علامة زائد في البداية. ولا تدعم الصيغة التعليقات ولا الفواصل الزائدة في النهاية. وهاتان القاعدتان الأخيرتان تسببان أغلب الأخطاء الواقعية، لأن كائنات JavaScript وJSON5 والعديد من ملفات الإعداد تسمح بكليهما. أُعدّ الجدول المرجعي أدناه بتمرير كل خطأ شائع إلى المحلل نفسه الذي يستخدمه المنسّق.
التنسيق والتصغير والترتيب
التنسيق المقروء يضيف فواصل الأسطر والمسافات البادئة لتظهر البنية بوضوح؛ والمسافتان هما الأكثر شيوعًا في مشاريع JavaScript، وأربع مسافات هي الخيار المعتاد مع json.dumps(indent=4) في Python، أما علامات التبويب فتتيح لكل قارئ اختيار العرض. أما التصغير فيزيل كل مسافة غير ضرورية، مما يقلل حجم بيانات واجهات API ويجعل المستند يتسع في سطر واحد للسجلات أو متغيرات البيئة.
ترتيب المفاتيح يرتب أعضاء كل كائن أبجديًا وبشكل تكراري. كائنات JSON غير مرتبة بحسب التعريف، فلا يغير الترتيب المعنى، لكنه يسهّل كثيرًا مقارنة مستندين من نظامين مختلفين. انتبه إلى أن التحليل يحوّل الأرقام إلى أعداد double في JavaScript: فالأعداد الصحيحة الأكبر من 2^53 (9,007,199,254,740,992)، مثل بعض معرّفات قواعد البيانات، تفقد دقتها عند إعادة التنسيق، فاحتفظ بها كنصوص.
من JSON إلى صيغ أخرى
المستند المنسّق أسهل قراءة، لكنك قد تحتاجه أحيانًا بشكل آخر. تتحول مصفوفة الكائنات إلى جدول بيانات عبر تحويل JSON إلى CSV، وينقل محول البيانات ملفات كاملة بين JSON وXML وYAML وCSV.
الأسئلة الشائعة
- لماذا يرفض المنسق ملف JSON الذي يحتوي على تعليقات؟
- لا تتضمن صيغة JSON القياسية أي بنية للتعليقات؛ فقد استبعدها RFC 8259 عمدًا. احذف التعليقات، أو أبقِ الملف بصيغة JSONC أو JSON5 إذا كانت الأداة التي تقرؤه تدعمهما.
- ما معنى "Unexpected token" في خطأ JSON؟
- صادف المحلل محرفًا لا يجوز ظهوره في ذلك الموضع، مثل علامة اقتباس مفردة، أو فاصلة زائدة قبل }، أو مفتاح بلا علامات اقتباس. يشير السطر والعمود المعروضان إلى ذلك المحرف.
- هل يغيّر ترتيب المفاتيح بياناتي؟
- لا. ترتيب أعضاء الكائن لا معنى له في JSON، فالمستند المرتب مكافئ للأصل. أما ترتيب عناصر المصفوفة فله معنى ولا يتغير أبدًا.
- لماذا تغيّر رقم طويل بعد التنسيق؟
- تخزّن JavaScript الأرقام على شكل أعداد عشرية 64 بت، ولا تمثّل الأعداد الصحيحة بدقة إلا حتى 2^53. تُقرَّب المعرّفات الأكبر عند التحليل؛ أرسلها كنصوص للحفاظ على كل رقم.
- هل يمكنني تنسيق ملف JSON بدلًا من لصقه؟
- افتح الملف في أي محرر نصوص، وحدد كل المحتوى والصقه هنا. قد تبطئ الملفات الكبيرة جدًا التي تبلغ عشرات الميغابايت التبويب أثناء عرض المحتوى في حقل النص.