سؤال

هل يمكن لأحد أن يخبرني ما هو الفرق الرئيسي بين كائن JavaScript المحدد باستخدام كائن الترميز الحرفي و كائن JSON?

وفقًا لكتاب JavaScript ، تقول إن هذا كائن محدد باستخدامه تدوين الكائن:

var anObject = {
    property1 : true,
    showMessage : function (msg) { alert(msg) }
};

لماذا ليس كائن JSON في هذه الحالة؟ فقط لأنه لم يتم تعريفه باستخدام علامات الاقتباس؟

هل كانت مفيدة؟

المحلول

دعنا نوضح أولاً ماذا جيسون في الواقع. JSON هو نص, ، تنسيق تبادل البيانات المستند إلى اللغة ، مثل XML أو CSV أو YAML.

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

هذه التنسيقات عادة ما تكون مستقلة عن اللغة ، مما يعني أنه يمكن معالجته بواسطة Java و Python و JavaScript و PHP ، سمها ما شئت.

في المقابل، جافا سكريبت هي لغة البرمجة. بالطبع يوفر JavaScript أيضًا وسيلة لتحديد/وصف البيانات ، ولكن بناء الجملة خاص جدًا بـ JavaScript.

كمثال مضاد ، فإن بيثون لديه مفهوم tuples, ، بناء الجملة الخاص بهم (x, y). JavaScript ليس لديه شيء مثل هذا.


دعنا نلقي نظرة على الاختلافات النحوية بين حرفيات كائن JSON و JavaScript.

لدى JSON القيود النحوية التالية:

  • هدف مفاتيح لا بد وأن سلاسل (أي تسلسل أحرف مغلق في عروض أسعار مزدوجة ").
  • يمكن أن تكون القيم إما:
    • سلسلة
    • رقم
    • كائن (JSON)
    • مجموعة
    • true
    • false
    • null
  • مفاتيح مكررة ({"foo":"bar","foo":"baz"}) إنتاج نتائج غير محددة ، خاصة بالتنفيذ ؛ مواصفات JSON على وجه التحديد لا تحدد دلالاتها

في JavaScript ، يمكن أن يكون للكائنات الحرفية

  • الأسلاك الحرفية أو الأرقام الحرفية أو أسماء المعرفات كمفاتيح (منذ ES6 ، يمكن الآن حساب المفاتيح ، والتي تقدم بناء جملة آخر).
  • يمكن أن تكون القيم أي تعبير جافا سكريبت صالح ، بما في ذلك تعريفات الوظائف و undefined.
  • تنتج المفاتيح المكررة نتائج محددة ومحددة (في الوضع السائب ، يستبدل التعريف الأخير الأول ؛ في الوضع الصارم ، إنه خطأ).

مع العلم ذلك ، فقط أنظر إلى بناء الجملة, ، مثالك ليس JSON بسبب سببين:

  1. مفاتيحك ليست سلاسل (حرفية). هم انهم أسماء المعرف.
  2. لا يمكنك تعيين وظيفة كقيمة إلى "كائن JSON" (لأن JSON لا تحدد أي بناء جملة للوظائف).

ولكن الأهم من ذلك ، تكرار توضيحي من البداية: أنت في سياق JavaScript. يمكنك تحديد كائن JavaScript. إن وجدت ، لا يمكن احتواء "كائن JSON" إلا في سلسلة:

 var obj = {foo: 42}; // creates a JavaScript object (this is *not* JSON)
 var json = '{"foo": 452}'; // creates a string containing JSON

أي إذا كنت تكتب رمز مصدر JavaScript ، ولا تتعامل مع أ سلسلة, ، أنت لا تتعامل مع JSON. ربما تلقيت البيانات كـ JSON (على سبيل المثال ، عبر Ajax أو القراءة من ملف) ، ولكن بمجرد أن تكون أنت أو المكتبة التي تستخدمها قد قامت بتحليلها ، لم تعد JSON.


فقط لأن الكائن الحرفي و JSON ينظران مماثل, ، هذا لا يعني أنه يمكنك تسميةهم بالتبادل. أنظر أيضا لا يوجد شيء مثل "كائن JSON".

نصائح أخرى

جيسون يحتوي على بناء جملة محدود أكثر من ذلك:

  • يجب نقل القيم الرئيسية
  • يجب نقل السلاسل مع " و لا '
  • لديك مجموعة محدودة من القيم (مثل أي وظائف مسموح بها)

لا يوجد شيء مثل "كائن JSON".

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

علاوة على ذلك ، (الجانبي ...) عندما يتحدث الناس عن "كائن JSON" ، فإنهم يعني دائمًا البيانات التي تحتوي على "أعمدة مجعد" في المستوى الأعلى. هذا يتوافق بشكل جيد مع كائن جافا سكريبت. ومع ذلك ، لا تتطلب مواصفات JSON كائن "المشكلات المجعدة" على المستوى الأعلى لسلسلة JSON. من الصالح تمامًا JSON الحصول على قائمة في المستوى الأعلى ، أو حتى الحصول على قيمة واحدة فقط. لذلك ، في حين أن كل "كائن JSON" يتوافق مع JSON صالح ، وليس كل سلاسل JSON صالحة تتوافق مع ما نسميه "كائن JSON"! (لأن السلسلة يمكن أن تمثل قائمة أو قيمة ذرية)

وفق JSON في JavaScript,

JSON هو مجموعة فرعية من التدوين الحرفي الكائن لجافا سكريبت.

وبعبارة أخرى ، فإن JSON الصحيح هو أيضًا تدوين حرفي جافا سكريبت صالح ولكن ليس بالضرورة في الاتجاه الآخر.

بالإضافة إلى قراءة توثيق, ، كما اقترح filix King ، أقترح أيضًا اللعب مع JSONLINT ONLINE JSON Valitator. هكذا تعلمت أن مفاتيح كائنات JSON يجب أن تكون سلاسل.

🔫 جيسون: البديل الخالي من الدهون لـ XML

تم تبني JSON على نطاق واسع من قبل الأشخاص الذين وجدوا أنه جعل من الأسهل بكثير إنتاج التطبيقات والخدمات الموزعة. نوع وسائل الإعلام الرسمية على الإنترنت لـ JSON application/json RFC 4627. تستخدم أسماء ملفات JSON التمديد .json.


► تدوين كائن JavaScript (JSON) هو تنسيق لتبادل البيانات خفيفة الوزن ، مستقلة عن اللغة. تم استخدام JSON لتبادل البيانات بين التطبيقات المكتوبة في أي لغة برمجة.

كائن JSON هو كائن واحد يحتوي على وظيفتين ، تحليل وتصليفي ، يتم استخدامه لتحليل نصوص JSON وبناءها.

  • JSON.Stringify تنتج سلسلة تتوافق مع قواعد JSON التالية.
  • يقبل json.parse سلسلة تتوافق مع قواعد JSON.

سيتم تضمين طريقة Parsejson في Fourth Edition of ECMAScript. في غضون ذلك ، يتوفر تطبيق JavaScript على json.org.

var objLiteral = {foo: 42}; // JavaScript Object
console.log('Object Literal : ', objLiteral ); // Object {foo: 42}foo: 42__proto__: Object

// This is a JSON String, like what you'd get back from an AJAX request.
var jsonString = '{"foo": 452}';
console.log('JOSN String : ', jsonString ); // {"foo": 452}

// This is how you deserialize that JSON String into an Object.
var serverResposnceObject = JSON.parse( jsonString );
console.log('Converting Ajax response to JavaScript Object : ', serverResposnceObject); // Object {foo: 42}foo: 42 __proto__: Object

// And this is how you serialize an Object into a JSON String.
var serverRequestJSON = JSON.stringify( objLiteral );
console.log('Reqesting server with JSON Data : ', serverRequestJSON); // '{"foo": 452}'

JSON هي مجموعة فرعية من JavaScript. جافا سكريبت تم اشتقاقها من معيار لغة برمجة ECMASCRIPT.


► Ecmascript

نمت ECMASCRIPT لتكون واحدة من لغات البرمجة العامة للأغراض العامة في العالم. من المعروف باسم اللغة المدمجة في متصفحات الويب ولكن تم تبنيها على نطاق واسع للخادم والتطبيقات المدمجة. يعتمد Ecmascript على العديد من التقنيات الأصلية ، والكائن الأكثر شهرة JavaScript (Netscape Communications)) و JScript (شركة مايكروسوفت).). على الرغم من أن ECMA كانت معروفة باسم "جمعية مصنعي الكمبيوتر الأوروبية" ، بعد عام 1994 ، عندما أصبحت المنظمة عالمية ، تم الاحتفاظ بـ "العلامة التجارية" "ECMA" لأسباب تاريخية.

Ecmascript هي اللغة ، في حين تسمى JavaScript و JScript وحتى Actionscript "Dialects".

وقد اشتققت اللهجات من نفس اللغة. إنها مشابهة تمامًا لبعضها البعض لأنها تم اشتقاقها من نفس اللغة لكنها خضعت لبعض التغييرات. لهجة هي تباين في اللغة نفسها. وهي مشتقة من لغة واحدة.

  • لغة SQL - لهجة Hibernate MySQL ، لهجة Oracle ، .. التي لها بعض التغييرات أو الوظائف المضافة.

معلومات حول المتصفح وجهاز الكمبيوتر الخاص بالمستخدمين.

navigator.appName // "Netscape"

Ecmascript هي لغة البرمجة النصية التي تشكل أساس JavaScript. JavaScript language resources.

ECMA-262 Links
Initial Edition, June 1997 بي دي إف.
2nd Edition, August 1998 بي دي إف.
3rd Edition, December 1999 بي دي إف.
5th Edition, December 2009 بي دي إف.
5.1 Edition, June 2011 لغة البرمجة.
6th Edition, June 2015 لغة البرمجة.
7ᵗʰ Edition, June 2016 لغة البرمجة.
8th edition, June 2017 لغة البرمجة.
9th Edition, 2018 لغة البرمجة.

ملاحظة " الطبعة الرابعة من ecmascript لا تم نشره على أنه عمل غير مكتمل.


تحدد JSON مجموعة صغيرة من قواعد التنسيق للتمثيل المحمول للبيانات المنظمة.

  1. must يجب نقل القيم الرئيسية ، فقط الأوتار مسموح بها للمفاتيح. إذا كنت تستخدم بخلاف السلسلة ، فسيتم تحويلها إلى سلسلة. ولكن لا ينصح باستخدام مفاتيح غير السلسلة. تحقق من مثال مثل هذا - { 'key':'val' } خلال RFC 4627 - jsonformatter

    var storage = {
      0 : null,
      1 : "Hello"
    };
    console.log( storage[1] ); // Hello
    console.log( JSON.stringify( storage ) ); // {"0":null,"1":"Hello","2":"world!"}
    
    var objLiteral = {'key1':'val1'};
        var arr = [10, 20], arr2 = [ 'Yash', 'Sam' ];
        var obj = { k: 'v' }, obj2 = { k2: 'v2' };
        var fun = function keyFun() {} ;
    
    objLiteral[ arr ] = 'ArrayVal';     objLiteral[ arr2 ] = 'OverridenArrayVal';
    objLiteral[ obj ] = 'ObjectVal';    objLiteral[ obj2 ] = 'OverridenObjectVal';
    objLiteral[ fun ] = 'FunctionVal';
    
    console.log( objLiteral );
    // Object {key1: "val1", 10,20: "ArrayVal", Yash,Sam: "OverridenArrayVal", [object Object]: "OverridenObjectVal", function keyFun() {}: "FunctionVal"}
    console.log( JSON.stringify( objLiteral ) );
    // {"key1":"val1","10,20":"ArrayVal","Yash,Sam":"OverridenArrayVal","[object Object]":"OverridenObjectVal","function keyFun() {}":"FunctionVal"}
    console.log( JSON.parse( JSON.stringify( objLiteral ) ) );
    // Object {key1: "val1", 10,20: "ArrayVal", Yash,Sam: "OverridenArrayVal", [object Object]: "OverridenObjectVal", function keyFun() {}: "FunctionVal"}
    
    console.log('Accessing Array  Val : ', objLiteral[ [10,20] ] );
    console.log('Accessing Object Val : ', objLiteral[ '[object Object]' ] );
    console.log('Accessing Function Val : ', objLiteral[ 'function keyFun() {}' ] );
    
  2. ► يجب نقل سلاسل JSON مع "وليس". سلسلة تشبه إلى حد كبير سلسلة C أو Java. يجب أن تكون الأوتار ملفوفة في اقتباسات مزدوجة.

    • الحرفية هي قيم ثابتة ، وليس متغيرات ، التي تقدمها حرفيًا في البرنامج النصي الخاص بك.
    • السلسلة هي سلسلة من الأحرف الصفر أو أكثر ملفوفة في عروض أسعار مع هروب الانزلاق ، وهو نفس التدوين المستخدم في معظم لغات البرمجة.
      • 🔫 - يُسمح بالرموز الخاصة في السلسلة ولكن لا تتوصي بالاستخدام.
      • " - يمكن الهروب من الأحرف الخاصة. ولكن لا توصي للهروب (') اقتباسات واحدة. في الوضع الصارم سوف يرمي وخطأ - SyntaxError: Unexpected token ' in JSON

    تحقق مع هذا الرمز { "Hai\" \n Team 🔫":5, "Bye \'": 7 } على عبر الإنترنت json reptions. ModesnotStrict,Strinct.

    var jsonString = "{'foo': 452}"; // {'foo': 452}
    var jsonStr = '{"foo": 452}'; // {"foo": 452}
    
    JSON.parse( jsonString ); // Unexpected token ' in JSON at position 1(…)
    JSON.parse( jsonStr ); // Object {foo: 452}
    
    objLiteral['key'] = 'val'; // Object {foo: 42, key: "val"}
    objLiteral.key2 = 'val';
    
    // objLiteral.key\n3 - SyntaxError: Invalid or unexpected token
    objLiteral['key\n3'] = 'val'; // Object {"foo": "42", key: "val", key2: "val", "key↵3": "val"}
    
    JSON.stringify( objLiteral ); // {"foo":"42","key":"val","key2":"val","key\n3":"val"}
    

هدف ملحقات الممتلكات توفير الوصول إلى خصائص الكائن باستخدام تدوين DOT أو تدوين القوس.

  1. ► لديك مجموعة محدودة من القيم (مثل أي وظائف مسموح بها). يمكن أن تكون القيمة سلسلة في عروض أسعار مزدوجة أو رقم أو منطقية أو خالية أو كائن أو صفيف. هذه الهياكل يمكن أن تكون متداخلة.

    var objLiteral = {};
    objLiteral.funKey = function sayHello() {
        console.log('Object Key with function as value - Its outcome message.');
    };
    
    objLiteral['Key'] = 'Val';
    
    console.log('Object Literal Fun : ', objLiteral );
    // Object Literal Fun :  Object {Key: "Val"}Key: "Val"funKey: sayHello()__proto__: Object
    console.log( JSON.stringify( objLiteral ) ); // {"Key":"Val"}
    

enter image description here


JavaScript هو التنفيذ الأكثر شعبية لمعيار ecmascript. تعتمد الميزات الأساسية لـ JavaScript على معيار ECMASCRIPT ، ولكن لدى JavaScript أيضًا ميزات إضافية أخرى غير موجودة في مواصفات/ecma. كل متصفح لديه مترجم جافا سكريبت.

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

Literals :

'37' - 7    // 30
'37' + 7    // "377"
+'37' + 7   // 44
+'37'       // 37
'37'        // "37"

parseInt('37');     // 37
parseInt('3.7');    // 3

parseFloat(3.7);    // 3.7

// An alternative method of retrieving a number from a string is with the + (unary plus) operator:
+'3.7'              // 3.7

Object literals RFC 7159

يتم تمثيل بنية الكائن كزوج من الأقواس المجعد المحيطة بالصفر أو أكثر من أزواج الاسم/القيمة (أو الأعضاء). الاسم هو سلسلة. يأتي قولون واحد بعد كل اسم ، يفصل الاسم عن القيمة. فاصلة واحدة تفصل قيمة عن الاسم التالي. يجب أن تكون الأسماء داخل كائن فريدة من نوعها.

ECMASCRIPT يدعم الميراث القائم على النموذج الأولي. كل مُنشئ له نموذج أولي مرتبط ، وكل كائن تم إنشاؤه بواسطة هذا المُنشئ له إشارة ضمنية إلى النموذج الأولي (يسمى النموذج الأولي للكائن) المرتبط بمنشئه. علاوة على ذلك ، قد يكون للنموذج الأولي إشارة ضمنية غير خالية إلى النموذج الأولي ، وهلم جرا ؛ وهذا ما يسمى سلسلة النموذج الأولي.

في لغة موجهة إلى الكائنات القائمة على الفصل ، بشكل عام ، يتم تنفيذ الحالة بواسطة الحالات ، ويتم تنفيذ الأساليب بواسطة الفئات ، والميراث هو فقط من الهيكل والسلوك. في ECMASCRIPT ، يتم ورث الحالة والأساليب بواسطة الكائنات ، والبنية والسلوك والدولة كلها موروثة.

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

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

مقتطفات من https://tools.ietf.org/html/rfc7159

  1. جافا سكريبت هدف تدوين (JSON) هو تنسيق نص لتسلسل البيانات المنظمة. إنه مشتق من هدفحرفي JavaScript ، على النحو المحدد في معيار لغة برمجة ECMascript ، الطبعة الثالثة [ECMA-262].
  2. يمكن أن تمثل JSON أربعة أنواع بدائية (الأوتار والأرقام والطلاوى والخالية) ونوعين منظمين (أشياء والصفائف).
  3. و هدف هي مجموعة غير مرتبة من أزواج الاسم/القيمة صفر أو أكثر ، حيث يكون الاسم عبارة هدف, أو صفيف.
  4. بداية = WS ٪ X7B WS ؛ {غادر قوس مجعد
  5. كائن نهاية = WS ٪ X7D WS ؛ } قوس مجعد يمين
  6. يجب أن تكون قيمة JSON هدف, أو المصفوفة أو الرقم أو السلسلة أو أحد الأسماء الحرفية الثلاثة التالية: False Null True
  7. و هدف يتم تمثيل الهيكل كزوج من الأقواس المجعد
  8. الأسماء داخل هدف يجب أن تكون فريدة من نوعها. هدف = بداية عضو *(عضو في القيمة المسبقة)] كائن نهاية
  9. و هدف أسمائها كلها فريدة من نوعها قابلة للتشغيل بالمعنى أن جميع تطبيقات البرامج التي تتلقى ذلك هدف سوف تتفق على تعيينات القيمة. عندما تكون الأسماء داخل هدف ليست فريدة من نوعها ، سلوك البرنامج الذي يتلقى مثل هذا هدف لا يمكن التنبؤ به.
  10. أمثلة (من صفحة 12 من RFC)

    هذا كائن JSON:

          {
            "Image": {
                "Width":  800,
                "Height": 600,
                "Title":  "View from 15th Floor",
                "Thumbnail": {
                    "Url":    "http://www.example.com/image/481989943",
                    "Height": 125,
                    "Width":  100
                },
                "Animated" : false,
                "IDs": [116, 943, 234, 38793]
              }
          }
    

    عضو الصورة هو هدف الذي عضو المصغرة هو هدف وعضو IDS الذي هو مجموعة من الأرقام.

لا يوجد شيء مثل "كائن JSON".

هل حقا؟

بقدر ما أفهم الفرق الرئيسي هو المرونة.

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

نتيجة لذلك ، لدينا كائنات أبسط وأكثر موحدة تناسب تبادل البيانات بين الأنظمة الأساسية.

لذلك ، فإن NewObject في مثالي أعلاه هو كائن محدد باستخدام تدوين JavaScript Objeect ؛ لكنه ليس كائن JSON "صالحًا" لأنه لا يتبع القواعد التي تتطلبها معايير JSON.

هذا الرابط مفيد أيضًا:http://msdn.microsoft.com/en-us/library/bb299886.aspx

أولاً ، يجب أن تعرف ما هو JSON:

إنه تنسيق لترتيب البيانات اللغوية اللغوية. استلهم بناء جملة JSON من التدوين الحرفي لكائن JavaScript ، ولكن هناك اختلافات بينهما.

على سبيل المثال ، في JSON ، يجب نقل جميع المفاتيح ، بينما في الحرفية الكائنات ، هذا ليس ضروريًا:

// json: {"foo": "bar"}

// كائن حرفي: var o = {foo: "bar"} ؛ الأسعار إلزامية على JSON لأنه في JavaScript (أكثر بالضبط في Ecmascript 3rd. Edition) ، يتم عدم السماح باستخدام الكلمات المحجوزة كأسماء العقارات ، على سبيل المثال:

var o = {if: "foo"} ؛ // Syntaxerror في ES3 بينما ، باستخدام سلسلة حرفية كاسم خاصية (نقلاً عن اسم الخاصية) لا يعطي أي مشاكل:

var o = {"if": "foo"} ؛ لذلك من أجل "التوافق" (وسهل التقييم ربما؟) الاقتباسات إلزامي.

تقتصر أنواع البيانات في JSON أيضًا على القيم التالية:

صفيف كائن رقم السلسلة عبارة عن حرفيًا: يتغير خطأ خاطئ. يجب تحديدها بواسطة عروض أسعار مزدوجة ، بينما في JavaScript ، يمكنك استخدام عروض أسعار مفردة أو مزدوجة بالتبادل.

// invalid json: {"foo": 'bar'} تتغير قواعد الأرقام json المقبولة أيضًا ، في JavaScript ، يمكنك استخدام حرفيات سداسية عشرية ، على سبيل المثال 0xFF ، أو (الشرير) الحرفي الأوكتالي على سبيل المثال 010. في JSON يمكنك استخدامه فقط العشرية الحرفية.

// invalid json: {"foo": 0xff}

جافا سكريبت كائن حرفي مقابل JSON:

  • بناء الجملة الحرفي الكائن هو وسيلة مريحة للغاية لإنشاء كائنات JavaScript
  • ال JSON اللغة ، التي تعني "تدوين كائن JavaScript" ، لديها بناء جملة مستمدة من بناء الجملة الحرفي كائن JavaScript. يتم استخدامه كأنه لغة برمجة مستقلة نقل البيانات النصية.

مثال:

تدوين كائن JS ، المستخدم في JS لإنشاء كائنات في الكود بسهولة:

const JS_Object = {
  1: 2,  // the key here is the number 1, the value is the number 2
  a: 'b', // the key is the string a, the value is the string b
  func: function () { console.log('hi') }
  // the key is func, the value is the function
}

مثال على JSON:

{"widget": {
    "debug": "on",
    "window": {
        "title": "Sample Konfabulator Widget",
        "name": "main_window",
        "width": 500,
        "height": 500
    },
    "image": { 
        "src": "Images/Sun.png",
        "name": "sun1",
        "hOffset": 250,
        "vOffset": 250,
        "alignment": "center"
    },
    "text": {
        "data": "Click Here",
        "size": 36,
        "style": "bold",
        "name": "text1",
        "hOffset": 250,
        "vOffset": 100,
        "alignment": "center",
        "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
    }
}}

الاختلافات الرئيسية:

  • يجب أن تكون جميع مفاتيح الكائنات في JSON سلاسل. في JavaScript ، يمكن أن تكون مفاتيح أو أرقام

  • يجب نقل جميع الأوتار في JSON في "اقتباسات مزدوجة". بينما في JavaScript كلا الاقتباسات المفردة والاقتباسات المزدوجة مسموح بها. حتى مع عدم وجود علامات اقتباس في تدوين كائن JavaScript ، يتم إلقاء مفاتيح الكائن ضمنيًا على الأوتار.

  • في JSON لا يمكن تعريف وظيفة كقيمة لكائن (لأن هذا هو JavaScript محدد). في JavaScript هذا قانوني تماما.

جافا سكريبت في JSON هدف:

JSON يمكن تحويل الكائنات بسهولة إلى JavaScript والعكس بالعكس باستخدام Build In JSON الكائن الذي يقدمه JavaScript في وقت تشغيله. فمثلا:

const Object = {
  property1: true,
  property2: false,
}; // creating object with JS object literal syntax

const JSON_object = JSON.stringify(Object);  // stringify JS object to a JSON string

console.log(JSON_object); // note that the (string) keys are in double quotes

const JS_object = JSON.parse(JSON_object);  // parse JSON string to JS object

console.log(JS_object.property1, JS_object.property2); 
// accessing keys of the newly created object

هنا فرق واحد مفاجئ: لا يمكنك استخدام undefined في JSON وسيختفي جميع حقول الكائنات ذات القيم غير المحددة بعد ذلك JSON.stringify

let object =  { "a": undefined } ;

let badJSON= '{ "a": undefined }';


console.log('valid JS object :', object );
console.log('JSON from object:', JSON.stringify(object) );
console.log('invalid json    :', JSON.parse(badJSON) );

🙈🙉🙊

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top