JSON
امتداد الملف |
.json |
---|---|
صيغة وسائط الإنترنت |
Data interchange |
امتدّ من | |
امتدّ لـ | |
المعايير | |
موقع الويب |
json.org (الإنجليزية) ![]() |
JSON (بالإنجليزية: JSON JavaScript Object Notation)، اختصارا لـ: ترميز الكائنات باستعمال جافا سكريبت، هي صيغة تبادل بيانات خفيفة الوزن، ذات معيار مفتوح. وتستند إلى نص، يكون تمثيل البيانات بصيغة بسيطة ومصفوفات مترابطة قابلة لقراءة الإنسان تسمى كائنات (objects).
تنسيق JSON محددة أصلا في RFC 4627 من قبل دوغلاس كروكفورد نوع جسون الرسمي في الإنترنت هو application/json امتداد ملفات JSON هي.json
تنسيقات JSON غالبا ما تستخدم لنقل وتنظيم تسلسل البيانات عبر شبكات الاتصال. تطبيقه الرئيسي هو في أجاكس (AJAX) برمجة تطبيقات الويب، حيث أنها تخدم بصفتها بديل لصيغة لغة الترميز القابلة للامتداد (XML).
على الرغم من أن JSON يعتمد على مجموعة فرعية أو جزء من لغة البرمجة (جافا سكريبت JavaScript، على وجه التحديد، المقياس والمعيار ECMA-262 الإصدار الثالث - ديسمبر 1999) يستخدم عادة مع تلك اللغة، فهو يعتبر لغة (مستقلة في تنسيق البايانات) الاكواد لتوليد وتوزيع وإنتاج بيانات JSON متاحة بسهولة لمجموعة كبيرة ومتنوعة من لغات البرمجة موقع json.org يقدم قائمة شاملة من ارتباطات JSON الموجودة، منظم بواسطه اللغة.
في ديسمبر 2005 ،بدأت ياهو! بتقديم بعض خدماتها على شبكة الإنترنت اختياريا في JSON. جوجل بدأت بتقديم JSON لتغذية (جي دي أي تي أي) GData بروتوكول الإنترنت في ديسمبر 2006.
أنواع البيانات وبناء الجمل والأمثلة
من أنواع JSON الأساسية هي:
- العدد (صحيحا، وحقيقيا، فواصل عشرية)
- .السلسلة (اليونيكود المزدوج مع الرمز المائل </>)
- .منطقية (صحيح أو خاطئ)
- .المصفوفات Array (وهو مرتبة ترتيب تسلسلي للقيم مفصولة بفواصل ومغلقة بأقواس مربعة)
- . الكائنات Object) (مجموعة من القيم المزدوجة (ازواج)، مفصولة بفواصل ومغلقة بأقواس متعرجة)
لا شئ
المثال التالي يوضح تمثيل جسون لكائن (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 جون سميث مع eval()
]] :
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 أقل من مصادر موثوق بها. محلل JSON سوف يعترف فقط بنص JSON، ويرفض كافة البرامج النصية. في المتصفحات التي توفر الدعم لـJSON الاصلي، JSON موزعي هي أيضا أسرع بكثير من وحدة التقييم ()evel. ومن المتوقع أن دعم JSON الأصلي سيتم إدراجها في التقرير المقبل ECMAScript القياسية. [1]
في المواصفات، و mime-type، النوع الذي سيتم استخدامه يجب أن يكون application/jsonrequest
مخطط JSON (JSON schema)
هناك عدة طرق للتحقق من هيكل وأنواع البيانات داخل كائن (objecT,)جسون، مثل مخطط XML مخطط JSON (JSON schema) هي مواصفات للشكل القائم لـJSON لتحديد وتعريف الهيكل لبيانات JSON. مخطط JSON يتيح ويعطي عقد لماهي بيانات JSON المطلوبة لتحقيق تطبيق ما، وكيف يمكن تعديله، يشبه إلى حد كبير ما يوفر ويعطي مخطط XML لـXML. مخطط JSON (JSON schema) يهدف إلى توفير التحقق من صحة الوثائق، والسيطرة على التفاعل مع بيانات JSON. مخطط JSON (JSON schema) يقوم على مفاهيم من مخطط XML (XML schema) (RelaxNG),(Kwalify)، ولكن المقصود منها أن تكون JSON هي الأساس، بحيث ان تكون بيانات JSON في شكل مخطط (schema) يمكن استخدامها للتحقق من صحه بيانات JSON، بنفس التسلسل/أدوات إلغاء التسلسل تستعمل لأجل المخطط والبيانات، وأنه يمكن أن يكون تقرير وصفي.
استخدام JSON في Ajax
شفرة جافا سكريبت التالية يبين كيف يمكن للعميل استخدام XMLHttpRequest لطلب كائن (object) في تنسيق JSON من الخادوم. (حذف البرمجة من جهه الخادوم، بل لابد من تشكيل للرد على الطلبات على url مع سلسلة منسقه من JSON)
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) يشتمل على استخدام وظيفة رد الاتصال المشفرة مرت بين العميل والخادوم للسماح العميل بتحميل بيانات JSON من مجالات الطرف الثالث، وإخطار وظيفة الطالب عند الانتهاء، على الرغم من أن هذا يفرض بعض المخاطر الأمنية ومتطلبات إضافية على الخادوم.
ويمكن أيضا استخدام عناصر المتصفحات <iframe> لطلب بيانات JSON بشكل متزامن في هجوم عبر متصفح أزياء، أو استخدام عادي وسهل للتقديمات <form action="url_to_cgi_script" target="name_of_hidden_iframe">
هذه المقاربات كانت سائدة قبل مجيء تأييد واسع لـXMLHttpRequest.
يمكن <script>
الفعال يمكن أن تستخدم أيضا لنقل البيانات JSON. مع هذا الأسلوب كان من الممكن أن يحصل كل ما حول نفس سياسه الأصل لكنه غير آمن. JSONRequest وقد اقترح بديلا أكثر أمانا.
القضايا الأمنية
على الرغم من JSON يقصد به أن يكون تنسيق متسلسل للبيانات، والتصميم على مجموعة فرعية من لغة البرمجة جافا سكريبت هموما أمنية عدة. وسط هذه المخاوف بشأن استخدام مترجم جافا سكريبت الفعال لتنفيذ نص JSON بصيغته جافا سكريبت، مما يعرض البرنامج النصي لشاردة أو خطأ وارد فيه، وكثيرا ما يكون مصدر قلق كبير عند التعامل مع البيانات التي تم استردادها من الإنترنت. في حين ليست الوسيلة الوحيدة لعملية JSON، وهي تقنية سهلة وشعبية، نابعة من تصميم JSON لتكون متوافقة مع عمليه جافا سكريبت ()evel، ويتضح ذلك من شيفرات ورموز الأمثلة التالية.
جافا سكريبت eval()
لأن جميع تنسيقات نصوص JSON أيضا دمج الجملة القانونية لشيفرات الجافا سكريبت، وسيلة سهلة للبرنامج جافا سكريبت لتحليل JSON - تنسيق البيانات هو استخدام eval()
المدمج في وظيفة جافا سكريبت eval()
، والذي صمم لتقييم تعبيرات جافا سكريبت. بدلا من استخدام JSON - محلل محددة، جافا سكريبت تترجم هي نفسها مستخدمة execute بيانات JSON الأصلي لإنتاج كائنات جافا سكريبت.
تقنية وحدة التقييم eval() يخضع لنقاط ضعف أمنية إذا كانت البيانات وكامل بيئة جافا سكريبت ليست ضمن السيطرة على مصدر واحد موثوق به. إذا كانت البيانات هي في حد ذاتها غير موثوق بها، على سبيل المثال، قد يكون عرضة للهجمات الخبيثة شفرة جافا سكريبت الحقن؛ ما لم يتم استخدام وسائل إضافية للتحقق من صحة البيانات الأولى. التعبيرات العادية تستخدم أحيانا لتنفيذ هذا الاختيار قبل استدعاء eval
أيضا، مثل هذه الثقة من الانتهاكات تؤدي إلى احتمال إنشاء مواطن ضعف لسرقة البيانات والتزوير والتوثيق، وغيرها من احتمال إساءة استخدام البيانات والموارد. اف ار سي FRC التي تعرف JSON (RFC 4627) يوحي باستخدام التعليمات البرمجية التالية للتحقق من صحة JSON eval'ing قبل ذلك (المتغير 'نص','text' هو مدخل JSON) :
var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
text.replace(/"(\\.|[^"\\])*"/g,))) &&
eval('(' + text + ')');
وثمة وظيفة جديدة، parseJSON()
، وقد اقترح بديلا أكثر أمانا من eval
، لأنها تهدف على وجه التحديد طريقة عمل بيانات JSON وليس جافا سكريبت. كان من المقرر إدراجها في الإصدار الرابع من معيار إي سي إم ايه سكريبت، [1] على الرغم من أنه يتوفر الآن في مكتبة جافا سكريبت في http://www.JSON.org/json2.js وسيكون في الإصدار الخامسة من ECMAScript. [بحاجة لمصدر]
الأم JSON
متصفحات الويب أما أن تكون حديثه الآن أو قد تعمل على JSON الأم من فك أو التشفير الذي يزيل المشكلة الأمنية لـ eval()
. JSON الأصلية عموما أسرع مقارنة مع مكتبات جافا سكريبت التي كان يشيع استخدامها من قبل. في يونيو / حزيران 2009 المتصفحات التالية لها، أو سيكون JSON الأصلي الداعم لها :
- موزيلا فايرفوكس 3.5 + [2]
- مايكروسوفت إنترنت إكسبلورر 8 [3]
- بكت ومقرها المتصفحات (eg. جوجل كروم، أبل سفاري) [4]
ما لا يقل عن 4 مكتبات جافا سكريبت مشهوره متعهد باستخدام JSON الأصلية إذا كانت متاحة :
بالمقارنة مع غيرها من الأشكال
XML
إكس إم إلXML وكثيرا ما تستخدم لوصف البيانات المركبة وتسلسل الكائنات(objects) بروتوكولات XML المختلفة تستند إلى وجود لتمثيل نفس النوع من هياكل البيانات كما لنفس النوع من بيانات جسون لأغراض التبادل. ومع ذلك، إكس إم إل XML كونها عامة الغرض كلغة ترميزية، فهي عند بناء جملة أكثر تعقيدا وأكبر حجما من الملف جسون، والتي، في المقابل، تم تصميمه خصيصا لتبادل البيانات.
كلا منهما تفتقر إلى آلية واضحة لتمثيل نوع بياناتالثنائية الكبيرة binary data مثل بيانات الصورة (على الرغم من البيانات الثنائية binary data يمكن ان تكون متسلسلة في كلتا الحالتين من خلال تطبيق ثنائي إلى النص لأغراض عامة إلى نظام ترميز النص). جسون يفتقر إلى المراجع، وهذه سمة أصلية من هذه التطبيقات، وليس له تدوين على أي معيار مماثل على المسار XPath.
YAML
سواء من الناحية الوظيفية وبناء الجملة، جسون بشكله الفعال مجموعة فرعية من YAML. [9] أشهر مكتبه ل YAML مكتبة (Syck) أيضاتوزع جسون.[10] قبل YAML الإصدار 1.2، جسون كان فرع لا بأس به من الكمال، وذلك أساسا بسبب YAML تفتقر إلى معالجة مواطن من UTF - 32 والمطلوب فواصل الفاصلة الواجب اتباعها من قبل الفراغات
والنقطة الأكثر بروزا من المقارنة هو أن YAML يوفر تخصيب الجملة التالية التي ليس لها مقابل في تعبيرات جسون :
Relational:
- YAML عروض لبناء بيانات الجملة العلائقية (Relational): بدلا من تكرار بيانات مماثلة في وقت لاحق في وثيقة، وثيقة YAML يمكن أن تشير إلى مرساة في وقت سابق من file/ stream Recursive structures(على سبيل المثال، يمكن أن أعرب عن صفيف(array) تحتوي على نفسها) تكون على هذا النحو. على سبيل المثال، قد يكون الفيلم قاعدة بيانات قائمة الجهات الفاعلة (والسمات الخاصة بهم) تحت يلقي الفيلم، وأيضا أفلام قائمة (والسمات الخاصة بهم) تحت محفظة الفاعل.
Extensible:
- YAML كما تقدم أنواع البيانات الموسعة خارج الأوليات (امثله سلاسلstring، كسور، intsصحيحه، منطقيهbools) التي يمكن أن تشمل نوع فئة الإعلانات
Blocks:
- YAML يستخدم لبنة بناء الجملة البادئة للسماح للتنسيق البيانات المركبة دون استخدام أحرف إضافية (أي : أقواس، بين قوسين، علامات الاقتباس، الخ). بالإضافة إلى إعطاء YAML مظهرا مختلفا عن جسون، هذه الكتلة البادئة يسمح الجهاز للتغليف من نص من بين لغات الترميز الأخرى، أو حتى جسون في اللغات الأخرى الأصلي النمط الحرفي ودون الهروب من الاصطدام s. سيجيل
الكفاءة
جسون تستخدم في المقام الأول لنقل البيانات عبر الإنترنت، ولكن له بعض الخصائص التي تحد من كفاءة لهذا الغرض. على وجه الخصوص، يجب أن يتم ذلك على فك حرف على أساس كل حرف، وليس له معيار الحكم لضغط البيانات، التدريبي للسلاسل، أو مراجع كائن.
JSONP
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.
وصلات خارجية
- الموقع الرسمي
- "ECMA-404 JSON Data Interchange Format" (PDF). ECMA Int'l. مؤرشف من الأصل (pdf) في 2019-12-24.
- RFC 8259, JSON Data Interchange Format
- RFC 7049, Concise Binary Object Representation (CBOR) for JSON
- "JSON Validator". JSON lint. مؤرشف من الأصل في 2019-12-11.
- "JSON Beautifier". JSON Beautifier. مؤرشف من الأصل في 2018-08-14.
- "JSONPlaceholder". مؤرشف من الأصل في 2019-12-09. - Fake online REST API for developers
- "JSON Formatter Online". Json Formatter Online. مؤرشف من الأصل في 2019-04-10.