الأسئلة الشائعة حول استخدام الأداة: البيانات والملفات والتصدير
هل تُرفع البيانات، وما حجم الملف الذي يعمل، وهل يُخزَّن أي شيء محليًا، ولماذا يتحول النص الصيني إلى تسلسلات هروب: عشرة أسئلة توضّح الحدود الحقيقية لأداة JSON على الإنترنت.
تجمع أكثر الأسئلة تكرارًا حول الأدوات على هذا الموقع وحول مواصفة JSON، مرتبة حسب السيناريو، مع إجابة يمكنك التصرف بناءً عليها مباشرة بدلًا من استنتاج غامض.
25 مقالةهل تُرفع البيانات، وما حجم الملف الذي يعمل، وهل يُخزَّن أي شيء محليًا، ولماذا يتحول النص الصيني إلى تسلسلات هروب: عشرة أسئلة توضّح الحدود الحقيقية لأداة JSON على الإنترنت.
هل التعليقات مسموحة، ولماذا تسبب الفاصلة الزائدة خطأ، وهل تحتاج المفاتيح إلى اقتباسات، ولماذا يتغير 9007199254740993 — اثنا عشر استنتاجًا، كل واحد منها مفحوص وفق RFC 8259.
هل يجب أن تستخدم استعلامات المسارات JSONPath أم Pointer، وكيف تختار بين Patch وMerge Patch، وما الذي يمكن أن يمنعه Schema، وكيف تختار إصدار draft — كل ذلك موضّح في مرور واحد.
لماذا لا يفتح ملف JSON بحجم عشرات MB، وكم يكلف الاستنساخ العميق، وكيف نمنع تلويث __proto__، ومن أين يدخل XSS — عشرة استنتاجات إسعاف أولي مرتبة حسب العَرَض.
نمط التسمية، وتنسيقات الوقت، ودلالات null، وأشكال enum، وتنسيقات التهيئة، وتنظيم fixtures، وتعارضات الدمج — اثنتا عشرة مقايضة يتجادل حولها الفرق فعلًا.
RFC 8259 ليس فيه صياغة للتعليقات، لذا يجعل `//` وتعليقات الكتل `JSON.parse` يرمي خطأ. استخدم JSON5 أو JSONC، أو حقل `_comment`، أو وصف Schema، أو YAML بدلًا من ذلك.
الفواصل الزائدة قانونية في كائنات JavaScript الحرفية وقاتلة في JSON. هنا الخطأ الدقيق، وقواعد RFC 8259 التي تسببه، وثلاثة إصلاحات تصمد فعلًا.
BOM بترميز UTF-8 هو ثلاثة بايتات غير مرئية، فيفشل JSON.parse عند الحرف الأول ويبلّغ عن السطر 1 العمود 1، ما يجعل الملف يبدو فارغًا أو مقطوعًا.
JSON ليس فيه إلا حرفيات أعداد عشرية. يحوّل JSON.stringify كلا من NaN وInfinity إلى null دون تحذير، ولهذا يتكرر ظهور "حقل الرقم يكون null أحيانًا" في الإنتاج.
الأعداد الصحيحة فوق 2^53-1 تفقد دقتها في JSON.parse. معرّفات snowflake وأرقام الطلبات وbigints قواعد البيانات كلها تصطدم بذلك، فاحفظها كنصوص من الطرف إلى الطرف.
هروب \u4e2d\u6587 هو Unicode قانوني، وليس فشل ترميز. النص المشوه الحقيقي يبدو مختلفًا، والتمييز بينهما يحدد ما تحتاج فعلًا إلى إصلاحه.
مجموعات شاملة صارمة بالترتيب: JSONC يضيف التعليقات؛ وJSON5 يضيف الاقتباسات المفردة والمفاتيح بلا اقتباسات والفواصل الزائدة والأعداد الست عشرية. والاختيار الخاطئ يكسر API، لا محررك.
JSON يحدد البنية بالأقواس وYAML بالمسافات البادئة: الآلات تأخذ JSON، والبشر الذين يحررون التهيئة يأخذون YAML. التعليقات والمراسي وبنية المستندات المتعددة لا تنجو من التحويل.
JSON Pointer عنوان فريد يمكنك تخزينه كمفتاح؛ JSONPath لغة استعلام. استخدام الخاطئ منهما يكسر تحديثات التهيئة أو يعيد اختراع JSONPath معطوب.
Schema يحكم البنية والأنواع، لا المعنى التجاري. يمنع الحقول الناقصة والأنواع الخاطئة والقيم الخارجة عن النطاق، بينما تبقى قواعد مثل أن يكون المبلغ أكبر من صفر في الكود.
2020-12 هو الإصدار الحالي ويضيف $defs وprefixItems وunevaluatedProperties، لكن أدوات كثيرة ما زالت تتحدث draft-07 فقط. اختر وفق ما تدعمه سلسلة أدواتك بأكملها.
json-schema-to-typescript وquicktype يصدران ملف .d.ts بأمر واحد، لكنه مسودة: الاختيارية والاتحادات وadditionalProperties والتواريخ تحتاج إلى مراجعة بشرية.
التحسين بترتيب خاطئ يجعل كل تبديل مكتبة بلا فائدة. قس الشبكة والتحليل والعرض كلًا على حدة، ثم قلّل التحليلات وقلّص الحمولة واستعمل البث.
JSON.parse يعامل __proto__ كمفتاح عادي؛ والضرر يحدث في دمج تكراري يكتب إلى Object.prototype، فيرث كل كائن خصائص المهاجم.
JSON لا يُنفَّذ بنفسه أبدًا. تحدث XSS في اللحظة التي تتعامل فيها معه كـHTML — بدمج السلسلة على الخادم، أو innerHTML في الواجهة، أو إدراج JSON مباشرة داخل وسم script.
لا تحتاج إلى قراءة سياسة الخصوصية لتعرف. افتح لوحة الشبكة، وجرّب الصفحة دون اتصال، ثم أعد التحميل لترى هل بقي شيء. دقيقتان وثلاثة فحوص، بلا حاجة إلى ثقة.
لا يوجد حد ثابت؛ القيد هو ميزانية ذاكرة تبويبك. ملف بحجم 20MB يصير عادةً 60–100MB بعد التحليل، وDOM المميز بإبراز النحو قد يضاعف ذلك مرة أخرى.
الكائنات المجردة نظيفة حتى تحتاج إلى بيانات وصفية؛ الأغلفة الكاملة آمنة لكنها مطوّلة. لمعظم المشاريع استخدم حالة HTTP للنتائج وغلافًا ثابتًا للبيانات.
أرقام Epoch وسلاسل ISO لكل منهما مقايضاته، لكن خلطهما هو ما يكسر الأمور فعلًا. استخدم ISO 8601 مع إزاحة، وخزّن UTC، واعرض بتوقيت المستخدم.
`null` تعني أن الحقل موجود بلا قيمة؛ وحذفه يعني أن الحقل غير موجود. أجسام PATCH ودمج التهيئة والتعبئة المسبقة للنماذج هي حيث يعض الفرق.