مقدمة
JSON، اختصارًا لـ JavaScript Object Notation، هو تنسيق لتبادل البيانات. وكما يوحي الاسم، فإن JSON مشتق من لغة البرمجة JavaScript، ولكنه متاح للعديد من اللغات، بما في ذلك Python وRuby وPHP وJava. غالبًا ما يُنطق JSON مثل اسم "Jason".
يُعدّ JSON سهل القراءة وخفيف الوزن، ويُمثّل بديلاً جيداً لـ XML، كما أنه يتطلّب تنسيقاً أقل بكثير. يتناول هذا الدليل المعلوماتي البيانات التي يُمكن استخدامها في ملفات JSON، بالإضافة إلى البنية العامة وقواعد كتابة هذا التنسيق.
فهم بناء الجملة والبنية
يستخدم JSON الامتداد .json عندما يكون ملفًا مستقلًا، وعند تعريفه في تنسيق ملف آخر (مثل .html)، يمكن أن يظهر كسلسلة JSON بين علامتي اقتباس، أو ككائن مُسند إلى متغير. يتم نقل هذا التنسيق بين خادم الويب والعميل أو المتصفح.
كائن JSON هو تنسيق بيانات يتكون من مفتاح وقيمة، وعادةً ما يكون محاطًا بأقواس معقوفة. عند التعامل مع JSON، من المرجح أن تصادف كائنات JSON في ملف بامتداد .json، ولكن يمكن أن توجد أيضًا ككائن JSON أو سلسلة نصية ضمن سياق البرنامج.
إليك مثال على كائن JSON:
{
"first_name" : "Sammy",
"last_name" : "Shark",
"location" : "Ocean",
"online" : true,
"followers" : 987
}على الرغم من أن هذا مثال قصير، وقد يصل طول ملف JSON إلى عدة أسطر، إلا أنه يوضح أن التنسيق يُهيأ عمومًا بقوسين (أو معقوفتين) يُرمز لهما بـ {} على جانبيه، متبوعًا بزوج المفتاح والقيمة. تملأ هذه الأزواج المساحة بينهما. تُغلّف معظم البيانات المستخدمة في JSON في كائن JSON.
تُفصل أزواج المفتاح والقيمة بنقطتين رأسيتين، مثل "key": "value". ويُفصل كل زوج مفتاح وقيمة بفاصلة، لذا يُدرج الجزء الأوسط من JSON على النحو التالي: "key": "value"، "key": "value"، "key": "value". في المثال السابق، زوج المفتاح والقيمة الأول هو "first_name": "Sammy".
توجد مفاتيح JSON على يسار النقطتين الرأسيتين. يجب وضعها بين علامتي اقتباس مزدوجتين مثل "key"، ويمكن أن تكون أي سلسلة نصية صالحة. يجب أن تكون المفاتيح فريدة داخل كل كائن. يمكن أن تحتوي سلاسل المفاتيح هذه على مسافات مثل "first_name"، ولكن هذا قد يُصعّب الوصول إليها أثناء البرمجة، لذا يُفضّل استخدام الشرطات السفلية مثل "first_name".
توجد قيم JSON على يمين النقطتين الرأسيتين. وعلى مستوى أدق، يجب أن تكون هذه القيم من أحد أنواع البيانات الستة التالية:
- أوتار
- أرقام
- أشياء
- المصفوفات
- القيم المنطقية (صواب أو خطأ)
- باطل
على مستوى أوسع، يمكن أيضًا إنشاء القيم من أنواع بيانات كائنات JSON المعقدة أو أنواع بيانات المصفوفات، والتي سيتم مناقشتها في القسم التالي.
يحتفظ كل نوع من أنواع البيانات التي يتم تمريرها كقيم إلى JSON بصيغته الخاصة، مما يعني أن السلاسل النصية محاطة بعلامات اقتباس، لكن الأرقام ليست كذلك.
مع ملفات .json، عادةً ما تحصل على قالب ممتد على عدة أسطر، ولكن يمكن أيضًا كتابة JSON بالكامل على سطر واحد، كما في المثال التالي:
{ "first_name" : "Sammy", "last_name": "Shark", "online" : true, }هذا أكثر شيوعًا في أنواع الملفات الأخرى أو عند مواجهة سلسلة JSON.
كتابة بيانات JSON على عدة أسطر تجعلها أكثر قابلية للقراءة، خاصةً عند التعامل مع مجموعات بيانات كبيرة. ولأن JSON يتجاهل المسافات البيضاء بين عناصره، يمكنك فصل أزواج المفاتيح والقيم باستخدام النقطتين الرأسيتين (:) لجعل البيانات أكثر سهولة في القراءة.
{
"first_name" : "Sammy",
"last_name" : "Shark",
"online" : true
}من المهم التذكير بأنه على الرغم من تشابه كائن JSON ظاهريًا مع كائن JavaScript، إلا أنه لا يتبع نفس التنسيق. لذا، فبينما يمكنك استخدام الدوال في كائنات JavaScript، لا يمكنك استخدامها كقيم في JSON. أهم ما يميز JSON هو سهولة نقله بين لغات البرمجة بتنسيق متوافق مع جميع اللغات المشاركة. في المقابل، لا يمكن التعامل مع كائنات JavaScript إلا مباشرةً من خلال لغة برمجة JavaScript نفسها.
يمكن جعل بيانات JSON أكثر تعقيدًا باستخدام هياكل هرمية تتكون من كائنات ومصفوفات متداخلة. ستتعرف على المزيد حول هذه الهياكل المعقدة في الخطوة التالية.
العمل مع الأنواع المعقدة في JSON
بالإضافة إلى المصفوفات المتداخلة، يمكن لـ JSON تخزين الكائنات المتداخلة بتنسيق JSON. تُرسل هذه الكائنات والمصفوفات كقيم مُخصصة لمفاتيح، وقد تتكون أيضًا من أزواج مفتاح-قيمة.
الكائنات المتداخلة
في ملف users.json التالي، لكل مستخدم من المستخدمين الأربعة ("sammy" و"jesse" و"drew" و"jamie")، يتم تمرير كائن JSON متداخل كقيمة، مع مفتاحي "username" و"location" المتداخلين الخاصين به. كل إدخال مستخدم في كتلة التعليمات البرمجية التالية هو مثال على كائن JSON متداخل:
{
"sammy" : {
"username" : "SammyShark",
"location" : "Indian Ocean",
"online" : true,
"followers" : 987
},
"jesse" : {
"username" : "JesseOctopus",
"location" : "Pacific Ocean",
"online" : false,
"followers" : 432
},
"drew" : {
"username" : "DrewSquid",
"location" : "Atlantic Ocean",
"online" : false,
"followers" : 321
},
"jamie" : {
"username" : "JamieMantisShrimp",
"location" : "Pacific Ocean",
"online" : true,
"followers" : 654
}
}في هذا المثال، تُستخدم الأقواس المعقوفة لتكوين كائن JSON متداخل يحتوي على اسم المستخدم وبيانات الموقع المرتبطة به لكل مستخدم من المستخدمين الأربعة. وكما هو الحال مع أي قيمة أخرى، عند استخدام الكائنات، تُستخدم الفواصل لفصل العناصر.
المصفوفات المتداخلة
يمكنك أيضًا تضمين البيانات في JSON باستخدام مصفوفات JavaScript، والتي تُمرر كقيم. يستخدم JavaScript الأقواس المربعة [ ] في طرفي نوع المصفوفة. المصفوفات عبارة عن مجموعات مرتبة ويمكن أن تحتوي على قيم من أنواع بيانات مختلفة.
على سبيل المثال، قد تستخدم مصفوفة عند التعامل مع الكثير من البيانات التي يمكن تجميعها معًا، كما هو الحال عندما تكون هناك مواقع ويب مختلفة وملفات تعريف على وسائل التواصل الاجتماعي مرتبطة بمستخدم واحد.
باستخدام المصفوفة المتداخلة الأولى، قد يبدو ملف تعريف المستخدم "سامي" على النحو التالي:
{
"first_name" : "Sammy",
"last_name" : "Shark",
"location" : "Ocean",
"websites" : [
{
"description" : "work",
"URL" : "https://www.digitalocean.com/"
},
{
"desciption" : "tutorials",
"URL" : "https://www.digitalocean.com/community/tutorials"
}
],
"social_media" : [
{
"description" : "twitter",
"link" : "https://twitter.com/digitalocean"
},
{
"description" : "facebook",
"link" : "https://www.facebook.com/DigitalOceanCloudHosting"
},
{
"description" : "github",
"link" : "https://github.com/digitalocean"
}
]
}يستخدم مفتاحا "websites" و"social_media" مصفوفةً لتخزين معلومات حول رابطي موقعي سامي الإلكترونيين وثلاثة روابط لملفاته الشخصية على مواقع التواصل الاجتماعي. ويمكن تمييز هذه المصفوفات من خلال استخدام الأقواس المربعة.
يتيح لك استخدام التداخل في تنسيق JSON العمل مع بيانات أكثر تعقيدًا وهرمية.
مقارنة JSON مع XML
لغة XML، أو لغة الترميز القابلة للتوسيع، هي طريقة لتخزين البيانات التي يمكن الوصول إليها، والتي يمكن قراءتها من قبل البشر والآلات على حد سواء. يتوفر تنسيق XML للاستخدام في العديد من لغات البرمجة.
يتشابه XML مع JSON في نواحٍ عديدة، ولكنه يتطلب كمية أكبر من النصوص، كما أنه أطول ويستغرق وقتًا أطول في القراءة والكتابة. يحتاج XML أيضًا إلى تحليل باستخدام محلل XML، بينما يمكن تحليل JSON باستخدام دالة قياسية. كذلك، على عكس JSON، لا يدعم XML استخدام المصفوفات.
فيما يلي مثال على تنسيق XML:
<users>
<user>
<username>SammyShark</username> <location>Indian Ocean</location>
</user>
<user>
<username>JesseOctopus</username> <location>Pacific Ocean</location>
</user>
<user>
<username>DrewSquir</username> <location>Atlantic Ocean</location>
</user>
<user>
<username>JamieMantisShrimp</username> <location>Pacific Ocean</location>
</user>
</users>والآن، قارن البيانات نفسها المعروضة بصيغة JSON:
{"users": [
{"username" : "SammyShark", "location" : "Indian Ocean"},
{"username" : "JesseOctopus", "location" : "Pacific Ocean"},
{"username" : "DrewSquid", "location" : "Atlantic Ocean"},
{"username" : "JamieMantisShrimp", "location" : "Pacific Ocean"}
] }يُعدّ JSON أكثر اختصارًا ولا يتطلب وسوم إغلاق، على عكس XML. علاوة على ذلك، لا يستخدم XML المصفوفات كما في مثال JSON هذا (ويمكنك ملاحظة ذلك من خلال استخدام الأقواس).
إذا كنتَ مُلِمًّا بلغة HTML، فستلاحظ تشابهًا كبيرًا بين XML وJSON في استخدام الوسوم. مع أن JSON أبسط وأسرع استخدامًا من XML، بما في ذلك تطبيقات AJAX، إلا أنه من الأفضل تحديد نوع المشروع الذي تعمل عليه قبل اختيار بنية البيانات المناسبة.
نتيجة
JSON هو تنسيق خفيف الوزن يتيح لك مشاركة البيانات وتخزينها والعمل عليها. وقد شهد هذا التنسيق دعمًا متزايدًا في واجهات برمجة التطبيقات (APIs)، بما في ذلك واجهة برمجة تطبيقات تويتر. كما يُعد JSON تنسيقًا مثاليًا للاستخدام في جافا سكريبت، وله العديد من التطبيقات في مختلف لغات البرمجة الشائعة. يمكنك الاطلاع على دعم اللغات الكامل على موقع "مقدمة إلى JSON".
بما أنك على الأرجح لن تقوم بإنشاء ملفات JSON بنفسك، بل ستحصل عليها من مصادر أخرى، فمن المهم التركيز على كيفية استخدام JSON على النحو الأمثل في تطبيقاتك بدلاً من التركيز على بنية JSON نفسها. على سبيل المثال، باستخدام أداة Mr. Data Converter مفتوحة المصدر، يمكنك تحويل بيانات CSV أو البيانات المفصولة بعلامات الجدولة، والتي قد تجدها في تطبيقات جداول البيانات، إلى JSON. كما يمكنك تحويل XML إلى JSON والعكس باستخدام موقع Utilities-online.info المرخص بموجب رخصة المشاع الإبداعي.
وأخيرًا، عند ترجمة أنواع البيانات الأخرى إلى JSON، أو إنشاء نوعك الخاص، يمكنك التحقق من صحة JSON الخاص بك باستخدام JSONLint واختبار JSON الخاص بك في سياق تطوير الويب باستخدام JSFiddle.









