.JSON JavaScript Object Notation
.json

JavaScript Object Notation

JSON (ترميز كائنات JavaScript) يُخزّن بيانات منظّمة كنص UTF-8 باستخدام ستة أنواع قيم: سلاسل نصية وأرقام وقيم منطقية وnull وكائنات ومصفوفات. مُعيّر بشكل مستقل كـ RFC 8259 (IETF) وECMA-404 (Ecma International) وهو صيغة تبادل البيانات المهيمنة لواجهات برمجة التطبيقات وملفات الإعداد وقواعد بيانات المستندات. واجهات ZATCA للفوترة الإلكترونية الإلزامية في السعودية تعتمد JSON كصيغة استجابة أساسية.

بنية الصيغة
{ } — كائن الجذر
"key": value — أزواج مفتاح-قيمة
[ ] — المصفوفات
نصRFC 8259ECMA2001
غير قابل للتحويل

التحويل غير متاح حالياً. تحويل 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

مُكتشف لا مُخترع
كروكفورد وجد JSON مختبئاً داخل JavaScript
في 2001 أدرك دوغلاس كروكفورد أن مجموعة فرعية من صياغة الكائنات الحرفية في JavaScript ES3 تعمل بالفعل كصيغة بيانات مستقلة عن اللغة. "اكتشف" JSON بدلاً من تصميمها من الصفر.
حوكمة مزدوجة
هيئتا معايير تنشران نفس المواصفة
RFC 8259 (IETF) وECMA-404 (Ecma International) مواصفتان متطابقتان عمداً نُشرتا في 2017. هذا الترتيب الفريد يضمن عدم قدرة أي منظمة واحدة على التحكم في JSON.
حرب التعليقات المقدسة
كروكفورد منع التعليقات عمداً
التعليقات أُزيلت عمداً لمنع توجيهات التحليل من التضمين في البيانات. هذا يبقى السؤال الأكثر تكراراً حول JSON وأنجب JSON5 وJSONC وHJSON.
قاتل XML
JSON أنهى عصر واجهات XML
JSON أزاح XML كصيغة API القياسية لأنه أصغر بـ 30-50% ويُعيّن مباشرةً إلى بنى البيانات الأصلية. كل واجهة REST رئيسية ومعظم نقاط نهاية GraphQL تُعيد 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 مع الصيغ البديلة
المقارنة المعيار الفائز
.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 مسموحة.

1999ECMAScript 3 يُنشر — مواصفة JavaScript التي تحتوي صياغة الكائنات الحرفية التي سيُشتق منها JSON2001دوغلاس كروكفورد يُحدّد JSON في شركة State Software كصيغة تبادل بيانات خفيفة مبنية على مجموعة فرعية من ES32002كروكفورد يُسجّل json.org وينشر مخططات السكك الحديدية التي تُعرّف قواعد JSON النحوية في صفحة واحدة2006RFC 4627 يُنشر — أول مواصفة IETF لـ JSON كـ RFC معلوماتي2013ECMA-404 (الطبعة الأولى) يُنشر من Ecma International مُؤسّساً حوكمة المواصفة المزدوجة2017RFC 8259 يحصل على وضع معيار الإنترنت (STD 90) مُلزماً UTF-8 وحاظراً BOM — يُنشر بالتزامن مع ECMA-404 الطبعة الثانية وISO/IEC 21778:20172018مواصفة JSON5 تُنشر مُضيفةً التعليقات والفواصل اللاحقة والمفاتيح غير المُقتبسة لمعالجة إحباطات المطوّرين من JSON الصارم2020مسودة JSON Schema 2020-12 تصدر — التحقق والتعليق وhyper-schema لمستندات JSON المنظّمة
تنسيق والتحقق من JSON باستخدام jq أخرى
jq '.' input.json

jq مع مُرشّح الهوية '.' يقرأ ويُحلّل ويُنسّق JSON مع تلوين الصياغة. يخرج بحالة غير صفرية على JSON غير صالح مما يجعله مُدققاً ومُنسّقاً في أمر واحد.

التحقق من وتنسيق JSON بالمكتبة القياسية لـ Python أخرى
python3 -m json.tool input.json

وحدة json.tool المُدمجة في Python تُحلّل وتُنسّق JSON بمسافات بادئة من 4 فراغات. تخرج برسالة خطأ على المدخلات غير الصالحة. لا تحتاج حزماً خارجية — متاحة أينما وُجد Python.

استخراج حقول متداخلة باستخدام jq أخرى
jq '.data.users[] | {name: .name, email: .email}' input.json

يُمرّر كل عنصر من مصفوفة .data.users عبر إسقاط ويُخرج حقلي name وemail فقط ككائنات JSON جديدة. تعبيرات jq تتسلسل كأنابيب Unix لاستخراج بيانات قوي.

تصغير JSON إلى سطر واحد أخرى
jq -c '.' input.json > output.json

علامة -c (مضغوط) تُخرج JSON على سطر واحد بدون مسافات بيضاء إضافية. تُقلّل حجم الملف للنشر ونقل API بدون تغيير أي قيم بيانات.

التحقق من JSON بشكل مُضمّن باستخدام Node.js أخرى
node -e "JSON.parse(require('fs').readFileSync('input.json','utf8')); console.log('Valid JSON')"

يستخدم JSON.parse() المُدمج في Node.js للتحقق من ملف. يرمي SyntaxError مع موضع السطر والعمود على المدخلات غير الصالحة مما يساعد في تحديد الموقع الدقيق لأخطاء الصياغة.

التحويل غير متاح حالياً. تحويل JSON إلى CSV أو XML يتطلب ربط المخطط — ميزة قيد الدراسة.

منخفض

نقاط الضعف

  • تلوّث النموذج الأولي — حمولات JSON مُصاغة تحتوي مفاتيح __proto__ أو constructor يمكنها تعديل نماذج الكائنات الأولية عند التحليل بوظائف دمج أو نسخ عميق غير آمنة مما يُمكّن حقن الخصائص عبر التطبيق
  • حقن JSON — مدخلات مستخدم مُلصقة في سلاسل JSON بدون تهريب صحيح تسمح بحقن أزواج مفتاح-قيمة إضافية أو التلاعب بقيم موجودة في بناء JSON على الخادم
  • إلغاء تسلسل غير آمن — المُحلّلات التي تُنشئ كائنات بناءً على تلميحات نوع مُضمّنة في بيانات JSON (شائع في أطر Java و.NET) يمكنها تفعيل تنفيذ كود تعسفي عبر سلاسل أدوات
  • حرمان من الخدمة عبر بنى متداخلة بعمق — مستندات JSON بأكثر من 10000 مستوى تداخل يمكنها التسبب في تجاوز المكدس في المُحلّلات التكرارية وقيم سلاسل كبيرة للغاية يمكنها استنفاد ذاكرة المُحلّل

الحماية: FileDex يُعالج ملفات JSON بالكامل في المتصفح باستخدام JSON.parse() الأصلي — بدون eval() وبدون رفع للخادم وبدون إلغاء تسلسل إلى كائنات تطبيق. التحليل يحدث ضمن صندوق رمل ذاكرة المتصفح مع حدود عمق مكدس مُدمجة.

jq أداة
مُعالج JSON لسطر الأوامر — ترشيح وتحويل واستعلام JSON بصياغة أنابيب
JSON Schema مواصفات
مفردات للتحقق من بنية مستندات JSON وأنواعها وقيودها (المسودة 2020-12)
JSONLint خدمة
مُدقّق ومُنسّق JSON عبر الإنترنت — الصق أو ارفع JSON لفحص صياغي فوري
Ajv مكتبة
أسرع مُدقّق JSON Schema لـ JavaScript/TypeScript — يُترجم المخططات إلى كود مُحسّن
orjson مكتبة
تسلسل JSON عالي الأداء لـ Python — أسرع 3-10 مرات من وحدة json في المكتبة القياسية
simdjson مكتبة
مُحلّل JSON مُسرّع بـ SIMD يُعالج غيغابايتات في الثانية باستخدام تعليمات AVX2 وNEON