freeCodeCamp/guide/arabic/javascript/standard-objects/json/json-stringify/index.md

7.0 KiB

title localeTitle
JSON Stringify JSON Stringify

JSON Stringify

تحوّل طريقة JSON.stringify() قيمة جافا سكريبت آمنة JSON إلى سلسلة JSON متوافقة.

ما هي قيم JSON الآمنة التي قد يطرحها المرء! دعونا نجعل قائمة بجميع قيم JSON-unsafe وأي شيء غير موجود في القائمة يمكن اعتباره آمنًا من JSON.

قيم JSON-unsafe:

  • undefined
  • function(){}
  • (ES6 +) Symbol
  • كائن ذو مرجع (مراجع) دائرية فيه

بناء الجملة

JSON.stringify( value [, replacer [, space]])

في أبسط أشكالها وأكثرها استخدامًا:

JSON.stringify( value )

المعلمات

value : value جافا سكريبت "stringified".

replacer : (اختياري) وظيفة أو مصفوفة تعمل كمرشح لخصائص كائن القيمة المراد تضمينها في سلسلة JSON.

space (اختياري) قيمة رقمية أو سلسلة لتوفير المسافة البادئة لسلسلة JSON. إذا تم توفير قيمة رقمية ، فأن العديد من المسافات (حتى 10) تعمل كحاشية indentaion في كل مستوى. إذا تم توفير قيمة سلسلة ، فإن هذه السلسلة (تصل إلى 10 أجهزة chracters أولية) تعمل كمسافات عند كل مستوى.

نوع العودة

نوع إرجاع الأسلوب: string .

وصف

يتم تحويل قيم JSON الآمنة إلى نموذج سلسلة JSON المقابل لها. تظهر قيم JSON-unsafe من جهة أخرى:

  • undefined إذا تم تمريرها كقيم إلى الأسلوب
  • null إذا تم تمريرها كعنصر صفيف
  • لا شيء إذا تم تمريره كخصائص على كائن
  • يرمي خطأ إذا كان كائن مع مراجع (مراجع) دائرية عليه.

`` //JSON-safe values JSON.stringify({}); // '{}' JSON.stringify(true); // 'true' JSON.stringify('foo'); // '"foo"' JSON.stringify([1, 'false', false]); // '[1,"false",false]' JSON.stringify({ x: 5 }); // '{"x":5}' JSON.stringify(new Date(2006, 0, 2, 15, 4, 5)) // '"2006-01-02T15:04:05.000Z"'

//JSON-unsafe values passed as values to the method JSON.stringify( undefined ); // undefined JSON.stringify( function(){} ); // undefined

//JSON-unsafe values passed as array elements JSON.stringify({ x: [10, undefined, function(){}, Symbol('')] }); // '{"x":[10,null,null,null]}'

//JSON-unsafe values passed as properties on a object JSON.stringify({ x: undefined, y: Object, z: Symbol('') }); // '{}'

//JSON-unsafe object with circular reference on it var o = { }, a = { b: 42, c: o, d: function(){} };

// create a circular reference inside a oe = a;

// would throw an error on the circular reference // JSON.stringify( a ); ``

JSON.stringify(...) بشكل مختلف إذا كان الكائن الذي تم تمريره إليه يحتوي على طريقة toJSON() محددة عليه. سيتم إجراء تسلسل قيمة الإرجاع من أسلوب toJSON() بدلاً من الكائن نفسه.

يأتي هذا في متناول اليد بشكل استثنائي عندما يحتوي الكائن على أي قيمة JSON غير قانونية.

`` //JSON-unsafe values passed as properties on a object var obj = { x: undefined, y: Object, z: Symbol('') };

//JSON.stringify(obj); logs '{}' obj.toJSON = function(){ return { x:"undefined", y: "Function", z:"Symbol" } } JSON.stringify(obj); //"{"x":"undefined","y":"Function","z":"Symbol"}"

//JSON-unsafe object with circular reference on it var o = { }, a = { b: 42, c: o, d: function(){} };

// create a circular reference inside a oe = a;

// would throw an error on the circular reference // JSON.stringify( a );

// define a custom JSON value serialization a.toJSON = function() { // only include the b property for serialization return { b: this.b }; };

JSON.stringify( a ); // "{"b":42}" ``

replacer

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

var foo = {foundation: 'Mozilla', model: 'box', week: 45, transport: 'car', month: 7}; JSON.stringify(foo, ['week', 'month']); // '{"week":45,"month":7}', only keep "week" and "month" properties

إذا كان " replacer " دالة ، فسيتم استدعاؤه مرة واحدة للعنصر نفسه ، ثم مرة واحدة لكل خاصية في الكائن ، وفي كل مرة يتم تمرير وسيطين ، مفتاح وقيمة . لتخطي مفتاح في التسلسل ، يجب أن يتم إرجاع undefined . خلاف ذلك ، يجب إرجاع القيمة المقدمة. إذا كانت أي من هذه القيم عبارة عن كائنات بحد ذاتها ، فإن وظيفة replacer تسلسلها بشكل متكرر كذلك.

` function replacer(key, value) { // Filtering out properties if (typeof value === 'string') { return undefined; } return value; }

var foo = {foundation: 'Mozilla', model: 'box', week: 45, transport: 'car', month: 7}; JSON.stringify(foo, replacer); // '{"week":45,"month":7}' `

إذا كان يتم تمرير صفيف إلى JSON.stringify() و replacer عوائد undefined لأي من عناصره، يتم استبدال قيمة العنصر مع null . لا تستطيع وظائف replacer إزالة القيم من صفيف.

` function replacer(key, value) { // Filtering out properties if (typeof value === 'string') { return undefined; } return value; }

var foo = ['Mozilla', 'box', 45, 'car', 7]; JSON.stringify(foo, replacer); // "[null,null,45,null,7]" `

space

معلمة space المستخدمة في المسافة البادئة تجعل نتيجة JSON.stringify() أجمل.

` var a = { b: 42, c: "42", d: [1,2,3] };

JSON.stringify( a, null, 3 ); // "{ // "b": 42, // "c": "42", // "d": [ // 1, // 2, // 3 // ] // }"

JSON.stringify( a, null, "-----" ); // "{ // -----"b": 42, // -----"c": "42", // -----"d": [ // ----------1, // ----------2, // ----------3 // -----] // }" `

معلومات اكثر:

الرجوع إلى مستندات MDN .