JavaScript Object Notation
JSON (ترميز كائنات JavaScript) يُخزّن بيانات منظّمة كنص UTF-8 باستخدام ستة أنواع قيم: سلاسل نصية وأرقام وقيم منطقية وnull وكائنات ومصفوفات. مُعيّر بشكل مستقل كـ RFC 8259 (IETF) وECMA-404 (Ecma International) وهو صيغة تبادل البيانات المهيمنة لواجهات برمجة التطبيقات وملفات الإعداد وقواعد بيانات المستندات. واجهات ZATCA للفوترة الإلكترونية الإلزامية في السعودية تعتمد JSON كصيغة استجابة أساسية.
التحويل غير متاح حالياً. تحويل JSON إلى CSV أو XML يتطلب ربط المخطط — ميزة قيد الدراسة.
أسئلة شائعة
ما هو ملف JSON وما استخدامه؟
ملف JSON يُخزّن بيانات منظّمة كنص مقروء بشرياً باستخدام أزواج مفتاح-قيمة ومصفوفات. هو الصيغة القياسية لاستجابات واجهات برمجة التطبيقات وملفات إعداد التطبيقات مثل package.json وtsconfig.json ومستندات قواعد بيانات NoSQL. JSON مدعوم أصلاً في كل لغة برمجة رئيسية ويمكن فتحه في أي محرر نصوص. واجهات ZATCA للفوترة الإلكترونية في السعودية تستخدم JSON لجميع استجاباتها.
هل يمكن لـ JSON أن يحتوي تعليقات؟
لا. JSON لا يدعم التعليقات من أي نوع. دوغلاس كروكفورد استبعدها عمداً من المواصفة لمنع إساءة استخدامها كتوجيهات تحليل مما سبّب مشكلات توافقية في صيغ سابقة. لملفات الإعداد التي تحتاج تعليقات مُضمّنة استخدم JSONC (الصيغة المُستخدمة في إعدادات VS Code) أو JSON5 أو YAML كبدائل.
ما الفرق بين JSON وXML؟
JSON يستخدم أزواج مفتاح-قيمة ومصفوفات بصياغة بسيطة. XML يستخدم وسوم متداخلة مع عناصر فتح وإغلاق وسمات ومساحات أسماء. JSON أصغر بـ 30-50 بالمئة لنفس البيانات ويُعيّن مباشرةً إلى بنى بيانات اللغة الأصلية ولهذا حل محل XML كصيغة API القياسية.
ما هو NDJSON؟
NDJSON (JSON المُحدّد بأسطر جديدة) يضع قيمة JSON كاملة واحدة لكل سطر مفصولة بأحرف سطر جديد. على عكس JSON القياسي الذي هو مستند واحد NDJSON صيغة بث تُستخدم لملفات السجلات وخطوط أنابيب البيانات وواجهات برمجة التطبيقات حيث الحجم الإجمالي غير معروف.
لماذا تفقد الأرقام الكبيرة دقتها في JSON؟
معظم مُحلّلات JSON تستخدم أعداد عشرية IEEE 754 مزدوجة الدقة مما يُحدّد دقة الأعداد الصحيحة الآمنة بـ 53 بت. الأعداد الصحيحة التي تتجاوز 9,007,199,254,740,991 تُقرّب بصمت مما يُفسد القيم بدون أي رسالة خطأ. Twitter واجهت هذه المشكلة مع معرّفات التغريدات وأضافت حقولاً نصية كحل. أرسل المعرّفات الرقمية الكبيرة كسلاسل نصية دائماً.
كيف أتحقق من صحة ملف JSON؟
عدة أدوات مجانية تتحقق من وتُنسّق JSON. محررات النصوص المكتبية مع دعم JSON تُبرز أخطاء الصياغة فوراً. المُدققات عبر الإنترنت تُبلّغ عن السطر والموضع الدقيق للمشكلات. الأخطاء الشائعة التي تكسر JSON تشمل الفواصل اللاحقة بعد آخر عنصر والسلاسل بعلامات اقتباس مفردة بدلاً من مزدوجة ومفاتيح الخصائص غير المُقتبسة.
هل JSON لغة برمجة؟
لا. JSON صيغة تبادل بيانات وليست لغة برمجة. ليس لديها متغيرات أو دوال أو حلقات أو منطق. JSON تصف بنية البيانات فقط. اشتُقّت من صياغة JavaScript لكنها مستقلة تماماً عن اللغة وتُستخدم في كل لغة برمجة رئيسية.
ما يميز .JSON
الأصل: اكتشاف كروكفورد
قليل من صيغ البيانات يمكن تتبع أصلها إلى لحظة إدراك شخص واحد. دوغلاس كروكفورد أثناء عمله في شركة State Software عام 2001 أدرك أن مجموعة فرعية من صياغة الكائنات الحرفية في JavaScript تعمل بالفعل كصيغة تبادل بيانات خفيفة ومستقلة عن اللغة. لم يُصمّم JSON من الصفر بل "اكتشفها" كما قال لاحقاً مختبئةً داخل مواصفة ECMAScript 3 المنشورة عام 1999. سجّل كروكفورد json.org في 2002 ونشر مخططات السكك الحديدية التي تُعرّف القواعد النحوية بالكامل في صفحة واحدة. تلك القواعد لم تتغير منذ ذلك الحين.
اكتشف التفاصيل التقنية
حوكمة المواصفة المزدوجة
JSON يحتل مكانة فريدة في عالم المعايير: منظمتان مستقلتان تنشران مواصفات متطابقة عمداً. IETF تُصين RFC 8259 (ديسمبر 2017) الذي يحمل وزن معيار الإنترنت (STD 90) ويُلغي RFC 7159 (2014) وRFC 4627 (2006) السابقين. Ecma International تُصين ECMA-404 (الطبعة الثانية 2017) وISO نشرت نفس المحتوى كـ ISO/IEC 21778:2017. هذا الترتيب كان مقصوداً — بتثبيت JSON في هيئتي معايير منفصلتين لا تستطيع أي منظمة واحدة تغيير الصيغة من جانب واحد أو فرض قيود ترخيص.
الأنواع الستة
قيم JSON مُقيّدة بستة أنواع بالضبط. السلاسل النصية يجب أن تستخدم علامات اقتباس مزدوجة — علامات الاقتباس المفردة خطأ صياغي. الأرقام أعداد عشرية ذات دقة تعسفية في القواعد النحوية لكن معظم التطبيقات تُحلّلها كأعداد عشرية IEEE 754 مزدوجة الدقة مما يُحدّد دقة الأعداد الصحيحة بـ 53 بت. القيم المنطقية حروف صغيرة فقط: true وfalse وليس True أو False (مصيدة شائعة عند التحويل من Python). القيمة الحرفية null أيضاً حروف صغيرة فقط. الكائنات مجموعات غير مُرتّبة من أزواج مفتاح-قيمة في أقواس معقوصة حيث كل مفتاح يجب أن يكون سلسلة بعلامات اقتباس مزدوجة. المصفوفات تسلسلات مُرتّبة من القيم في أقواس مربعة. لا توجد أنواع أخرى — لا تاريخ ولا بيانات ثنائية ولا undefined ولا صياغة تعليقات.
جدل عدم وجود التعليقات
JSON لا يدعم التعليقات من أي نوع. لا تعليقات سطر واحد ولا تعليقات كتلة في القواعد النحوية. أزالها كروكفورد عمداً لمنع استخدامها كتوجيهات تحليل — ممارسة سببت مشكلات توافقية في تعليمات معالجة XML. هذا القرار يبقى السؤال الأكثر تكراراً حول JSON وأنجب عائلة كاملة من الامتدادات: JSON5 يُضيف التعليقات مع الفواصل اللاحقة والمفاتيح غير المُقتبسة وJSONC (JSON مع تعليقات) يُستخدم داخلياً في VS Code وHJSON يوفّر صيغة فائقة صديقة للبشر. لا شيء من هذه الامتدادات هو JSON صالح وفق RFC 8259 أو ECMA-404.
دقة الأرقام: مشكلة Twitter
القواعد النحوية تسمح بأرقام ذات دقة تعسفية لكن JSON.parse() في JavaScript والمُحلّلات المكافئة في معظم اللغات تُعيّن الأرقام إلى أعداد عشرية IEEE 754 مزدوجة الدقة. هذا يعني أن الأعداد الصحيحة الأكبر من 2 أس 53 تفقد الدقة بصمت. Twitter واجهت هذا عندما تجاوزت معرّفات التغريدات نطاق الأعداد الآمنة — تغريدة بمعرّف 9007199254740993 تُقرّب إلى 9007199254740992 بعد التحليل. حل Twitter كان إضافة حقل id_str يحتوي نفس المعرّف كسلسلة نصية — نمط شائع الآن في واجهات برمجة التطبيقات التي تتعامل مع معرّفات كبيرة بما في ذلك واجهات ZATCA وSADAD في السعودية.
JSON مقابل XML
JSON أزاح XML كصيغة بيانات API المهيمنة لأنه أقل إسهاباً ويُعيّن مباشرةً إلى بنى البيانات الأصلية. نفس البيانات المُعبّر عنها في XML تتطلب وسوم فتح ووسوم إغلاق وسمات ومساحات أسماء — ما يزيد عن 30 إلى 50 بالمئة من البايتات مقارنة بـ JSON المكافئ. كائنات JSON تُعيّن إلى قواميس أو خرائط تجزئة في كل لغة رئيسية بدون خطوة إلغاء تسلسل وسيطة. بوابة البيانات المفتوحة السعودية data.gov.sa تُقدّم بياناتها بصيغة JSON وليس XML لنفس أسباب الكفاءة.
NDJSON: JSON المتدفق
JSON القياسي مستند واحد — قيمة جذر واحدة لكل ملف. JSON المُحدّد بأسطر جديدة (NDJSON) يحل مشكلة البث بوضع قيمة JSON مستقلة واحدة لكل سطر مفصولة بأحرف سطر جديد. كل سطر مستند JSON كامل وقابل للتحليل. هذا يجعل NDJSON مناسباً لملفات السجلات وخطوط أنابيب البيانات وواجهات البث.
JSON Schema
JSON بذاته ليس لديه آلية لإعلان البنية المتوقعة للمستند. JSON Schema (المسودة الحالية: 2020-12) يملأ هذه الفجوة بتوفير مفردات لتحديد الحقول المطلوبة وأنواع القيم وأنماط السلاسل ونطاقات الأرقام وأطوال المصفوفات والتبعيات بين الحقول. مكتبات التحقق مثل Ajv (JavaScript) وjsonschema (Python) تفحص المستندات مقابل المخططات برمجياً.
الانتشار في واجهات برمجة التطبيقات
عملياً كل واجهة برمجة تطبيقات ويب حديثة تُعيد JSON. نقاط نهاية REST واستجابات GraphQL وحمولات webhook وتبادلات رموز OAuth وأحداث الخادم المُرسلة كلها تستخدم JSON افتراضياً. ملفات الإعداد عبر منظومة JavaScript — package.json وtsconfig.json و.eslintrc.json وvercel.json — هي JSON. قواعد بيانات المستندات بما في ذلك MongoDB (عبر BSON) وCouchDB وFirebase Firestore تُخزّن البيانات كمستندات JSON. منصة علم Elm ونظام ZATCA للفوترة الإلكترونية في السعودية يعتمدان JSON كصيغة تبادل أساسية لجميع المعاملات.
مقارنة .JSON مع البدائل
| المقارنة | المعيار | الفائز |
|---|---|---|
| .JSON vs .XML | الإسهاب JSON يُمثّل نفس البيانات بنحو 30-50% بايتات أقل من XML. بدون وسوم إغلاق وبدون صياغة سمات وبدون إعلانات مساحات أسماء. الكائنات والمصفوفات تُعيّن مباشرةً إلى بنى بيانات اللغة الأصلية. | JSON أفضل |
| .JSON vs .YAML | أمان التحليل JSON لديه تحليل صالح واحد بالضبط لأي مدخل. YAML لديه حالات حدّية لتحويل النوع الضمني حيث 'NO' يصبح false المنطقية و'1.0' يصبح عدداً عشرياً. حساسية YAML للمسافات البيضاء تُسبب أخطاءً خفية يتجنبها JSON بمُحدّداته الصريحة. | JSON أفضل |
| .JSON vs .CSV | البيانات المتداخلة JSON يُمثّل أصلاً الكائنات المتداخلة والمصفوفات والأنواع المختلطة بعمق تعسفي. CSV ثنائي الأبعاد بشكل صارم بدون طريقة قياسية لترميز بنى هرمية أو أعمدة متعددة الأنواع. | JSON أفضل |
المرجع التقني
- نوع MIME
application/json- المطوّر
- Douglas Crockford / Ecma International
- سنة التقديم
- 2001
- معيار مفتوح
- نعم — عرض المواصفات
البنية الثنائية
JSON صيغة نص نقية بدون بنية ثنائية وبدون بايتات سحرية وبدون ترويسة ملف. الملفات مُرمّزة بـ UTF-8 كما يُلزم RFC 8259 للتبادل. مستند JSON يتكون من قيمة جذر واحدة عادةً كائن (أقواس معقوصة) أو مصفوفة (أقواس مربعة) رغم أن RFC 8259 يسمح بأي نوع قيمة على مستوى الجذر. الكائنات تحتوي أزواج مفتاح-قيمة مفصولة بفواصل حيث المفاتيح دائماً سلاسل بعلامات اقتباس مزدوجة. المسافات البيضاء بين الرموز — فراغات وعلامات جدولة وأسطر جديدة — غير ذات دلالة وتتجاهلها المُحلّلات. لا يجوز إضافة BOM وفق RFC 8259 القسم 8.1. لا فواصل لاحقة ولا سلاسل بعلامات اقتباس مفردة ولا تعليقات ولا قيمة undefined مسموحة.
التحويل غير متاح حالياً. تحويل JSON إلى CSV أو XML يتطلب ربط المخطط — ميزة قيد الدراسة.
نقاط الضعف
- تلوّث النموذج الأولي — حمولات JSON مُصاغة تحتوي مفاتيح __proto__ أو constructor يمكنها تعديل نماذج الكائنات الأولية عند التحليل بوظائف دمج أو نسخ عميق غير آمنة مما يُمكّن حقن الخصائص عبر التطبيق
- حقن JSON — مدخلات مستخدم مُلصقة في سلاسل JSON بدون تهريب صحيح تسمح بحقن أزواج مفتاح-قيمة إضافية أو التلاعب بقيم موجودة في بناء JSON على الخادم
- إلغاء تسلسل غير آمن — المُحلّلات التي تُنشئ كائنات بناءً على تلميحات نوع مُضمّنة في بيانات JSON (شائع في أطر Java و.NET) يمكنها تفعيل تنفيذ كود تعسفي عبر سلاسل أدوات
- حرمان من الخدمة عبر بنى متداخلة بعمق — مستندات JSON بأكثر من 10000 مستوى تداخل يمكنها التسبب في تجاوز المكدس في المُحلّلات التكرارية وقيم سلاسل كبيرة للغاية يمكنها استنفاد ذاكرة المُحلّل
الحماية: FileDex يُعالج ملفات JSON بالكامل في المتصفح باستخدام JSON.parse() الأصلي — بدون eval() وبدون رفع للخادم وبدون إلغاء تسلسل إلى كائنات تطبيق. التحليل يحدث ضمن صندوق رمل ذاكرة المتصفح مع حدود عمق مكدس مُدمجة.
- مواصفات RFC 8259 — The JavaScript Object Notation (JSON) Data Interchange Format (Internet Standard, STD 90)
- مواصفات ECMA-404 (2nd Edition) — The JSON Data Interchange Syntax
- سجل JSON (JavaScript Object Notation) — Library of Congress Format Description (fdd000381)
- سجل JSON Data Interchange Format (fmt/817) — The National Archives PRONOM Registry
- سجل application/json — IANA Media Types
- تاريخ JSON — Wikipedia