جسونJSON
جسون (بالإنجليزية: JSON JavaScript Object Notation)، اختصار ل: ترميز الكائنات باستعمال جافا سكريبت، هي صيغة تبادل بيانات خفيفة الوزن، ذات معيار مفتوح. وتستند إلى نص، يكون تمثيل البيانات بصيغه بسيطه ومصفوفات مترابطه قابله لقراءه الإنسان تسمى كائنات (objects) تنسيق جسون محددة أصلا في ار اف سي (RFC 4627 من قبل دوغلاس كروكفورد نوع جسون الرسمي في الإنترنت هو application/json امتداد ملفات جسون هي.json تنسيقات جسون غالبا ما تستخدم لنقل وتنظيم تسلسل البيانات عبر شبكات الاتصال تطبيقه الرئيسي هو في اياكس (AJAX) برمجة تطبيقات الويب، حيث أنها تخدم كبديل لصيغة لغة الترميز القابلة للامتداد (XML) على الرغم من أن جسون يعتمد على مجموعة فرعية أو جزء من لغة البرمجة (جافا سكريبت JavaScript) (على وجه التحديد، المقياس والمعيار ECMA-262 الإصدار الثالث - ديسمبر 1999) يستخدم عادة مع تلك اللغة، فهو يعتبر لغة (مستقله في تنسيق البايانات) الاكواد لتوليد وتوزيع وإنتاج بيانات جسون متاحة بسهولة لمجموعة كبيرة ومتنوعة من لغات البرمجة موقع json.org يقدم قائمة شاملة من ارتباطات جسون الموجودة، منظم بواسطه اللغة. في ديسمبر 2005، بدأت (ياهو!) بتقديم بعض خدماتها على شبكة الإنترنت اختياريا في جسون JSON.(جوجل) بدأت بتقديم جسون لتغذيه (جي دي أي تي أي) GData بروتوكول الإنترنت في ديسمبر 2006. أنواع البيانات وبناء الجمل والأمثلةمن أنواع جسون الأساسية هي:
المثال التالي يوضح تمثيل جسون لكائن (Object) يصف شخصًا ما. الاوبجكت يحتوي على string(حقل من السلسلة)للاسم الأول واسم العائلة، يحتوي على كائن (object) يمثل عنوان الشخص، ويحتوي على قائمة array(مصفوفات) رقم الهاتف. {
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumbers": [
{ "type": "home", "number": "212 555-1234" },
{ "type": "fax", "number": "646 555-4567" }
]
}
ويعادل الممكنة لأعلاه في أكس أم ألXML يمكن أن يكون: <Person firstName="John" lastName="Smith">
<address>
<streetAddress>21 2nd Street</streetAddress>
<city>New York</city>
<state>NY</state>
<postalCode>10021</postalCode>
</address>
<phoneNumber type="home">212 555-1234</phoneNumber>
<phoneNumber type="fax">646 555-4567</phoneNumber>
</Person>
افترض أن النص الوارد أعلاه هو موجود في متغير (contact) من سلسلة (string) جافا سكريبت. منذ جسون JSON هي مجموعة فرعية من كائن التدوين [[الحرفي جافا سكريبت ; ويمكن للمرء ثم إعادة وصف الكائن object جون سميث مع eval()|الحرفي جافا سكريبت ; ويمكن للمرء ثم إعادة وصف الكائن object جون سميث مع var p = eval("(" + contact + ")");
يجب في بناء جمله الجافا سكريبت ان المتغير (contact) تكون ملفوفة بين قوسين لتجنب الغموض. جسون JSON موزعه ومبنيه في صلب المتصفحات المتقدمة مثل فايرفوكس 3.5 وإنترنت اكسبلورر8.0 var p = JSON.parse(<contact);
والحقول p.PhoneNumber, p.address.city,p.firstName ثم يتم الوصول إليها. بصفة عامة ()evel يجب أن تستخدم فقط لتحليل جسون JSONإذا كان مصدر تنسيق نص جسون موثوق به تماما، وتنفيذ تعليمات برمجية غيرموثوق بها أمر خطير. محللي جسون JSONالمتاحة لعملية مدخلات جسون أقل من مصادر موثوق بها. محلل جسون JSON سوف يعترف فقط بنص جسون JSON، ويرفض كافة البرامج النصية. في المتصفحات التي توفر الدعم لجسون الاصلي، جسون موزعي هي أيضا أسرع بكثير من وحدة التقييم ()evel. ومن المتوقع أن دعم جسون الأصلي سيتم إدراجها في التقرير المقبل ECMAScript القياسية. [1] في المواصفات، و mime-type، النوع الذي سيتم استخدامه يجب أن يكون application/jsonrequest مخطط جسون (JSON schema)هناك عدة طرق للتحقق من هيكل وأنواع البيانات داخل كائن (objecT,)جسون، مثل مخطط إكس إم إل.XML مخطط جسون (JSON schema) هي مواصفات للشكل القائم لجسون لتحديد وتعريف الهيكل لبيانات جسون. مخطط جسون يتيح ويعطي عقد ل ماهي بيانات جسون المطلوبة لتحقيق تطبيق ما، وكيف يمكن تعديله، يشبه إلى حد كبير ماذا`يوفر ويعطي مخطط XML لXML. مخطط جسون (JSON schema)يهدف إلى توفير التحقق من صحة الوثائق، والسيطرة على التفاعل مع بيانات جسون. مخطط جسون (JSON schema) يقوم على مفاهيم من مخطط إكس إم إل (XML schema) (RelaxNG),(Kwalify)، ولكن المقصود منها أن تكون جسون هي الأساس، بحيث ان تكون بيانات جسون في شكل مخطط (schema) يمكن استخدامها للتحقق من صحه بيانات جسون، بنفس التسلسل / أدوات إلغاء التسلسل تستعمل لأجل المخطط والبيانات، وأنه يمكن أن يكون تقرير وصفي. استخدام جسون في اياكس Ajaxشفرة جافا سكريبت التالية يبين كيف يمكن للعميل استخدام (XMLHttpRequest)لطلب كائن (object,) في تنسيق جسون من الخادم. (جذف البرمجة من جهه الخادم، بل لابد من تشكيل للرد على الطلبات على url مع سلسله منسقه من جسون.) var the_object = {};
var http_request = new XMLHttpRequest();
http_request.open("GET", url, true);
http_request.onreadystatechange = function () {
if (http_request.readyState == 4 && http_request.status == 200) {
the_object = JSON.parse(http_request.responseText);
}
http_request = null;
};
http_request.send(null);
علما بأن استخدام (XMLHttpRequest) في هذا المثال ليس عبر متصفح متوافق؛ الاختلافات النحوية غير متوفرة في للإنترنت إكسبلورر، أوبرا} ، وسفاري، وعلى متصفحات موزيلا. فائدة XMLHttpRequest محدودة بسبب سياسة المصدر نفسه: العنوان (URL)لكي يرد على الطلب يجب أن يتواجد في نفس المجال (DNS) مثل الخادم الذي يستضيف الصفحة التي تحتوي على الطلب. بدلا من ذلك، فإن النهج (JSONP) يشتمل على استخدام وظيفة رد الاتصال المشفرة مرت بين العميل والخادم للسماح العميل بتحميل بيانات جسون من مجالات الطرف الثالث، وإخطار وظيفة الطالب عند الانتهاء، على الرغم من أن هذا يفرض بعض المخاطر الأمنية ومتطلبات إضافية على الخادم. ويمكن أيضا استخدام عناصر المتصفحات <iframe> لطلب بيانات جسون بشكل متزامن 1}في هجوم عبر متصفح أزياء، أو استخدام عادي وسهل للتقديمات يمكن القضايا الأمنيةعلى الرغم من جسون يقصد به أن يكون تنسيق متسلسل للبيانات، والتصميم على مجموعة فرعية من لغة البرمجة جافا سكريبت هموما أمنية عدة. وسط هذه المخاوف بشأن استخدام مترجم جافا سكريبت الفعال لتنفيذ نص جسون بصيغته جافا سكريبت، مما يعرض البرنامج النصي لشاردة أو خطأوارد فيه، وكثيرا مايكون مصدر قلق كبير عند التعامل مع البيانات التي تم استردادها من الإنترنت. في حين ليست الوسيلة الوحيدة لعملية جسون، وهي تقنية سهلة وشعبية، نابعة من تصميم جسون JSON's لتكون متوافقة مع عمليه جافا سكريبت ()evel، ويتضح ذلك من اكواد ورموز الأمثلة التالية. جافا سكريبت |
امتداد الملف |
.jsonp |
---|---|
صيغة وسائط الإنترنت |
application/json-p |
امتدّ لـ | |
المعايير |
JSONP أو «جسون مع حشوة» هو امتداد جسون فيه بادئة كما هو محدد مدخلات وسيطة من الكلمة نفسها. بادئة هذا التضخيم هو عادة اسم دالة رد، ولكن قد يكون أيضا تعيين متغير، بيانا إذا، أو أي حاله أخرى بيان بادئة جافاسكريبت الاقتراح الأصلي ويبدو أنه تم الإدلاء بها في بلوق MacPython في عام 2005 [11]، ويستخدم حاليا من قبل العديد من تطبيقات الويب 2.0 مثل تطبيقات دوجو أدوات جوجل أدوات تطبيقات [12]، وخدمات الشبكة العالمية. مزيد من التمديدات هذا البروتوكول قد تم النظر في الحجج التي اقترحها مدخلات إضافية، على سبيل المثال، هي حالة [13] التي تدعمها S3DB خدمات الويب.
لأن JSONP يجعل من استخدام السمات النصي، وتدعو هي في جوهرها مفتوحة على العالم. لهذا السبب، قد يكون من الملائم JSONP لحمل البيانات الحساسة.
بما في ذلك السمات النصي من المواقع البعيدة تسمح للمواقع نائية لحقن أي محتوى في موقع على شبكة الإنترنت. إذا كانت تلك المواقع النائية من نقاط الضعف التي تسمح للحقن جافا سكريبت، ويمكن أن الموقع الأصلي يمكن أن تتأثر أيضا.
طلب التزوير عبر الموقع
من السذاجة نشر JSONP تخضع لطلب عبر موقع الهجمات التزوير (CSRF أو XSRF). [14] [[لأن أتش تي أم أل لا يحترم نفسه منشأ السياسة في تطبيقات متصفح الإنترنت، صفحة الخبيثة يمكن طلب والحصول على البيانات جسون المنتمين إلى موقع آخر. وهذا سيسمح لجسون ترميز البيانات التي يتم تقييمها في سياق صفحة الخبيثة، وربما إفشاء كلمات السر أو غيرها من البيانات الحساسة إذا كان المستخدم بتسجيل الدخول إلى موقع آخر.
هذه ليست سوى مشكلة إذاترميز بيانات جسون يحتوي على المعلومات الحساسة التي يجب أن لا يتم الكشف عنها لطرف ثالث، وخادم يعتمد على المتصفح نفسه المنشأ سياسة لمنع وصول البيانات في حالة وجود طلب غير لائق. ليست هناك مشكلة إذا كان الخادم يحدد مدى ملاءمة هذا الطلب في حد ذاته، إلا أن وضع البيانات على السلك إذا كان هذا الطلب هو الصحيح. ملفات تعريف الارتباط في حد ذاتها ليست كافية لتحديد ما إذا كان طلب أذن. الاستخدام الحصري لالكوكيز يخضع لطلب عبر موقع التزوير.
كائن مراجع
معيار جسون لا يعتمد مراجع الكائن (objects refernces)، ولكن مجموعة الأدوات دوجو(DOJO) يوضح كيفية الاتفاقيات التي يمكن اعتمادها لدعم مثل هذه الإشارات باستخدام جسون القياسية. على وجه التحديد، وحدة dojox.json.ref يقدم الدعم لعدة أشكال من المراجع بما في ذلك التعميم، المتعدد، ادخال الرسالة، المراجع البطيئة
مراجع
- ^ Crockford، Douglas (6 ديسمبر 2006). "JSON: The Fat-Free Alternative to XML". مؤرشف من الأصل في 2018-09-16. اطلع عليه بتاريخ 2009-07-03.
- ^ "Using Native JSON". 30 يونيو 2009. مؤرشف من الأصل في 2012-03-05. اطلع عليه بتاريخ 2009-07-03.
- ^ Barsan، Corneliu (10 سبتمبر 2008). "Native JSON in IE8". مؤرشف من الأصل في 2010-02-22. اطلع عليه بتاريخ 2009-07-03.
- ^ Hunt، Oliver (22 يونيو 2009). "Implement ES 3.1 JSON object". مؤرشف من الأصل في 2019-01-21. اطلع عليه بتاريخ 2009-07-03.
- ^ "YUI 2: JSON utility". 1 سبتمبر 2009. مؤرشف من الأصل في 2016-07-28. اطلع عليه بتاريخ 2009-10-22.
- ^ "Ticket #4429". 22 مايو 2009. مؤرشف من الأصل في 2016-03-12. اطلع عليه بتاريخ 2009-07-03.
- ^ "Ticket #8111". 15 يونيو 2009. مؤرشف من الأصل في 2012-02-23. اطلع عليه بتاريخ 2009-07-03.
- ^ "Ticket 419". 11 أكتوبر 2008. مؤرشف من الأصل في 2018-11-06. اطلع عليه بتاريخ 2009-07-03.
- ^ Ben-Kiki، Oren؛ Evans، Clark؛ döt Net، Ingy (13 مايو 2008). "YAML Ain't Markup Language (YAML™) Version 1.2". مؤرشف من الأصل في 2011-10-07. اطلع عليه بتاريخ 2009-07-03.
YAML can therefore be viewed as a natural superset of JSON, offering improved human readability and a more complete information model. This is also the case in practice; every JSON file is also a valid YAML file. This makes it easy to migrate from JSON to YAML if/when the additional features are required.
- ^ RedHanded (7 أبريل 2005). "YAML is JSON". مؤرشف من الأصل في 2015-03-16. اطلع عليه بتاريخ 2009-07-03.
- ^ "Remote JSON - JSONP". from __future__ import *. Bob.pythonmac.org. 5 ديسمبر 2005. مؤرشف من الأصل في 2012-05-07. اطلع عليه بتاريخ 2008-09-08.
- ^ "GWT Tutorial: How to Read Web Services Client-Side with JSONP". Google Web Toolkit Applications. 6 فبراير 2008. مؤرشف من الأصل في 2016-03-03. اطلع عليه بتاريخ 2009-07-03.
- ^ Almeida، Jonas (11 يونيو 2008). "JSON, JSONP, JSONPP?". S3DB. مؤرشف من الأصل في 2017-02-15. اطلع عليه بتاريخ 2009-04-26.
- ^ Grossman، Jeremiah (27 يناير 2006). "Advanced Web Attack Techniques using GMail". مؤرشف من الأصل في 2016-03-05. اطلع عليه بتاريخ 2009-07-03.
وصلات خارجية