الكائنات والمصفوفات المتداخلة مناسبة لتمثيل البنية، لكنها غير عملية حين تحتاج إلى قائمة مسطّحة من أزواج «مفتاح: قيمة» — كما في جداول البيانات أو السجلات أو ملفات الترجمة. التسطيح (Flatten) يحل هذا التعارض تحديدًا.
كيف يعمل
يتحول كل حقل متداخل إلى سطر واحد، حيث المفتاح هو المسار الكامل إلى القيمة (مكتوبًا بنقاط أو بأقواس مربعة للفهارس)، والقيمة هي القيمة نفسها. مثلًا {"user": {"address": {"city": "القاهرة"}}} يصبح الزوج user.address.city → "القاهرة". عناصر المصفوفة تأخذ فهرسًا ضمن المسار، مثل items[0].name.
أين يُستخدم هذا: ملفات الترجمة (i18n)
المفاتيح المسطّحة بنقاط هي الشكل المعتاد لملفات الترجمة في مكتبات مثل i18next — settings.profile.title بدلًا من شجرة JSON متداخلة. عند تعريب موقع أو تطبيق، غالبًا ما تتعامل منصات الترجمة وفرق التعريب مع هذا الشكل المسطّح مباشرة، لا سيما أن اتجاه الكتابة من اليمين إلى اليسار يجعل مراجعة نص عربي داخل قائمة مسطّحة أسهل من تتبعه داخل شجرة JSON متداخلة.
لماذا يُستخدم هذا عمليًا
- استيراد بيانات متداخلة من واجهة برمجية إلى جدول بيانات أو جدول قاعدة بيانات مسطّح.
- تسهيل مقارنة كائنين معقّدين سطرًا بسطر.
- إيجاد قيمة معينة بسرعة داخل JSON عميق التداخل، عبر رؤية المسار الكامل دفعة واحدة.
العملية العكسية: unflatten
إعادة بناء البنية المتداخلة من القائمة المسطّحة تعني تفكيك كل مفتاح إلى أجزاء مساره (بالاعتماد على النقاط والفهارس بين الأقواس)، ثم بناء الكائنات والمصفوفات المتداخلة تدريجيًا. تظهر المشكلة حين يحتمل المسار معنيين — فإذا وُجد في البيانات مفتاح حرفي "a.b" ومسار متداخل a.b في آن واحد، لا يمكن لعملية unflatten تحديد المقصود، فتُبلغ عن تعارض بدل أن تكتب فوق البيانات بصمت.