javascript - كتاب - مميزات الجافا سكريبت




ما هو الحد الأدنى من JSON؟ (6)

JSON تعني ترميز كائن JavaScript. فقط {} و [] تحديد كائن Javascript. الأمثلة الأخرى هي القيم الحرفية. هناك أنواع كائنات في Javascript للعمل مع هذه القيم ، لكن التعبير "string" هو تمثيل شفرة مصدر لقيمة حرفية وليس كائن.

ضع في اعتبارك أن JSON ليس جافا سكريبت. إنه رمز يمثل البيانات. لديها بنية بسيطة للغاية ومحدودة. يتم تنظيم بيانات JSON باستخدام {},:[] . يمكنك فقط استخدام القيم الحرفية داخل تلك البنية.

إنها صالحة تمامًا للملقم للاستجابة إما مع وصف كائن أو قيمة حرفية. يجب أن يكون جميع موزعي JSON مقابض للتعامل مع قيمة حرفية فقط ، ولكن قيمة واحدة فقط. يمكن لـ JSON تمثيل كائن واحد فقط في كل مرة. لذا بالنسبة للخادم لإعادة أكثر من قيمة واحدة ، سيكون عليه بناءه ككائن أو مصفوفة.

لقد قرأت بعناية وصف JSON http://json.org/ ولكنني لست متأكدًا من أنني أعرف الإجابة على السؤال البسيط. ما السلاسل هي الحد الأدنى الممكن من JSON؟

  • "string" هي سلسلة JSON صالحة؟
  • 42 هو الرقم البسيط لـ JSON؟
  • true القيمة المنطقية هي JSON صالحة؟
  • {} هل الكائن الفارغ هو JSON صالح؟
  • [] هل المصفوفة فارغة JSON صالحة؟

في وقت الكتابة ، تم وصف JSON فقط في RFC4627 . يصف (في بداية "2") نص JSON بأنه كائن أو مصفوفة متسلسلة.

وهذا يعني أن فقط {} و [] هي سلاسل JSON كاملة ومكتملة في موزعي وموصِّلات تلتزم بهذا المعيار.

ومع ذلك ، فإن إدخال ECMA-404 التغييرات ، والنصائح المحدثة يمكن قراءتها هنا . لقد كتبت أيضًا مشاركة مدونة حول المشكلة.

JSON.stringify() إلى مزيد من الخلط بين المادة ، يتم توحيد كائن JSON (مثل JSON.stringify() JSON.parse() و JSON.stringify() ) المتوفر في متصفحات الويب في ES5 ، وهذا يحدد بوضوح نصوص JSON المقبولة كما يلي:

نسق تبادل JSON المستخدم في هذه المواصفة هو بالضبط ما تم وصفه بواسطة RFC 4627 مع وجود استثناءين:

  • قد يتكون إنتاج JSONText من المستوى الأعلى لقواعد JSON ECMAScript من أي JSONValue بدلاً من كونه مقتصراً على JSONObject أو JSONArray كما هو محدد بواسطة RFC 4627.

  • مقصوص

وهذا يعني أن جميع قيم JSON (بما في ذلك السلاسل والقيم الفارغة والأرقام) مقبولة بواسطة كائن JSON ، على الرغم من أن كائن JSON يلتزم تقنيًا بـ RFC 4627.

تجدر الإشارة إلى أنه يمكنك بالتالي ربط رقم في متصفح متوافق عبر JSON.stringify(5) ، والذي سيتم رفضه بواسطة محلل آخر يلتزم بـ RFC4627 ، ولكنه لا يتضمن الاستثناء المحدد المذكور أعلاه. روبي ، على سبيل المثال ، يبدو أنه مثال واحد يقبل فقط الأشياء والمصفوفات كجذر . من ناحية أخرى ، يضيف PHP الاستثناء على وجه التحديد إلى أنه "سيقوم أيضًا بتشفير وفك شفرة الأنواع القياسية و NULL".


ما عليك http://json.org/ اتباع الرسومات البيانية للسكك الحديدية الواردة في صفحة http://json.org/ . [] و {} هي الحد الأدنى من كائنات JSON الصالحة. لذا فإن الإجابة هي [] و {}.


نعم ، نعم ، نعم ، نعم ، ونعم. كل منهم قيم حرفيّة صحيحة لـ JSON.

ومع ذلك ، ينص على RFC4627 الرسمية:

نص JSON عبارة عن كائن أو مصفوفة متسلسل.

لذا يجب أن يتكون "ملف" كامل من كائن أو مصفوفة مثل الهيكل الخارجي ، والذي يمكن أن يكون فارغًا بالطبع. ومع ذلك ، فإن العديد من موزعي JSON يقبلون القيم البدائية بالإضافة إلى المدخلات.


يوجد على الأقل أربع وثائق (تعتبر rfc-7159 استمرارًا لـ rfc-7158) والتي يمكن اعتبارها معايير JSON على الإنترنت. أول RFCs الثلاثة جميعها تصف تطبيق mime type application/json . إليك ما يجب على كل شخص قوله عن قيم المستوى الأعلى:

RFC-4627 : لا.

نص JSON عبارة عن سلسلة من الرموز المميزة. تتضمن مجموعة الرموز ستة أحرف بنيوية ، وسلاسل ، وأرقام ، وثلاثة أسماء حرفيّة.

نص JSON عبارة عن كائن أو مصفوفة متسلسل.

JSON-text = الكائن / الصفيف

لاحظ أنه تم وضع علامة على RFC-4627 "إخبارية" في مقابل "مقترح مقترح" ، وأنه تم تجاوزه بواسطة RFC-7158 و RFC-7159.

RFC-7158 : نعم. (اعتبارا من المراجعة. bis-08 )

(راجع RFC-7159 ، وهو متطابق حاليًا.)

RFC-7159 : نعم.

نص JSON عبارة عن قيمة متسلسلة. لاحظ أن بعض المواصفات السابقة لـ JSON قيدت نص JSON ليكون كائنًا أو مصفوفة. ستكون عمليات التنفيذ التي تنشئ كائنات أو صفائف فقط حيث يتم استدعاء نص JSON قابلاً للتشغيل المتداخل ، بمعنى أن جميع التطبيقات ستقبل هذه على أنها متوافقة مع نصوص JSON.

JSON-text = ws value ws

لاحظ أن RFC-7159 موجود ببساطة لأن تاريخ نشر RFC-7158 تم نشره بطريق الخطأ كـ "مارس 2013" عندما تم تحديثه في مارس 2014 ( source ).

ECMA-262 : نعم.

يحدد JSON Syngactic Grammar نص JSON صالحًا من حيث الرموز المميزة المحددة بقواعد اللغة المعجمية JSON. رمز الهدف للنحو هو JSONText.

بناء جملة JSONText:

JSONValue

JSONValue:

JSONNullLiteral

JSONBooleanLiteral

JSONObject

JSONArray

JSONString

JSONNumber

ECMA-404 : نعم.

نص JSON عبارة عن سلسلة من الرموز المميزة التي تم تكوينها من نقاط شفرة Unicode التي تتطابق مع قواعد قيم JSON. تتضمن مجموعة الرموز المميزة ستة رموز هيكلية ، وأوتار ، وأرقام ، وثلاثة رموز مميزة للأسماء الحرفية.


var x;
JSON.stringify(x); // will output "{}"

لذا فإن إجابتك هي "{}" التي تشير إلى كائن فارغ.





validation