Ø¯Ø¹ÙØ§ ÙÙÙÙ Ø£Ù ÙØ¯ÙÙØ§ ÙØ§Ø¦Ù Ù Ø¹ÙØ¯ ÙÙØ±Ùد تØÙÙÙ٠إÙÙ ÙØµ (string) ÙØ¥Ø±Ø³Ø§Ù٠ع٠طرÙÙ Ø´Ø¨ÙØ© Ø§ÙØ¥ÙØªØ±ÙØª Ø£Ù Ø£Ù ÙØ·Ø¨Ø¹Ù ÙÙØ·.
٠٠اÙÙ ÙØªØ±Ø¶ Ø£Ù ÙØØªÙ٠اÙÙØµ ÙØ°Ø§ عÙÙ ÙÙ Ø§ÙØ®ØµØ§Ø¦Øµ اÙÙ ÙÙ Ù ÙÙÙØ§Ø¦Ù.
ÙÙ ÙÙÙØ§ إجراء Ø§ÙØªØÙÙÙ ÙØ§ÙآتÙ:
let user = {
name: "John",
age: 30,
toString() {
return `{name: "${this.name}", age: ${this.age}}`;
}
};
alert(user); // {name: "John", age: 30}
â¦ÙÙÙÙ Ø¹ÙØ¯ Ø§ÙØªØ·Ø¨ÙÙ Ø§ÙØ¹Ù
ÙÙ ÙØªÙ
Ø¥Ø¶Ø§ÙØ© خصائص Ø¬Ø¯ÙØ¯Ù أ٠إعادة تسÙ
ÙØ© خصائص ÙØ¯ÙÙ
Ù Ø£Ù Ø¥Ø²Ø§ÙØªÙا. ÙØªØØ¯ÙØ« اÙÙØµ ع٠طرÙÙ Ø§ÙØ¯Ø§ÙØ© toString ÙÙ Ù
رة سÙÙÙÙ ØµØ¹Ø¨ÙØ§. ÙÙ
ÙÙÙØ§ Ø£Ù ÙÙÙÙ
Ø¨Ø§ÙØªÙرار عÙÙ ÙÙ Ø§ÙØ®ØµØ§Ø¦Øµ ÙÙ ÙØ°Ø§ اÙÙØ§Ø¦Ù ÙÙÙÙ Ù
اذا إذا ÙØ§Ù ÙØ°Ø§ اÙÙØ§Ø¦Ù Ù
Ø¹ÙØ¯Ùا ÙÙØØªÙ٠عÙÙ ÙØ§Ø¦Ùات أخر٠بداخÙÙØ ÙØ¬Ø¨ Ø£Ù ÙÙÙÙ
بتØÙÙÙÙÙ
Ø£ÙØ¶Ùا.
ÙØØ³Ù Ø§ÙØØ¸Ø ÙÙØ³ ÙÙØ§Ù ØØ§Ø¬Ù ÙÙØªØ§Ø¨Ø© ÙÙØ¯ ÙÙÙÙ Ø¨Ø§ÙØªØ¹Ø§Ù ٠٠ع ذÙÙ. ÙÙØ¯ ت٠ØÙ ÙØ°Ù اÙÙ Ø´ÙÙ٠باÙÙØ¹Ù.
JSON.stringify
إ٠اÙÙØ§Ø¦Ù JSON (JavaScript Object Notation) ÙÙ Ø´ÙÙ Ø¹Ø§Ù ÙØ¹Ø±Ø¶ اÙÙØ§Ø¦Ùات ÙØ§ÙÙÙÙ . ÙÙØ¯ ØªÙ ÙØµÙÙ Ù٠ا Ù٠ا٠RFC 4627. ÙÙØ¯ صÙÙØ¹ ÙÙ Ø§ÙØ¨Ø¯Ø§ÙØ© Ù Ù Ø£Ø¬Ù Ø¬Ø§ÙØ§ Ø³ÙØ±ÙØ¨ØªØ ÙÙÙÙ ÙÙØ§Ù ÙØºØ§Øª ÙÙ ÙØªØ¨Ø§Øª أخر٠ÙÙØªØ¹Ø§Ù Ù Ù Ø¹Ù Ø£ÙØ¶Ùا. ÙÙØ°ÙÙ Ù Ù Ø§ÙØ³Ù٠استخدا٠اÙÙØ§Ø¦Ù JSON ÙØªØ¨Ø§Ø¯Ù Ø§ÙØ¨ÙØ§ÙØ§Øª Ø¹ÙØ¯Ù ا تÙÙ٠اÙÙØ§Ø¬ÙØ© Ø¨Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت ÙØ§ÙØ³ÙØ±Ùر / Ø§ÙØ¨Ø§Ù Ø§ÙØ¯ Ø¨ÙØºØ© ٠ث٠Ruby/PHP/Java أ٠أÙÙØ§ ÙØ§Ù.
ØªØØªÙÙ Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت عÙÙ Ø¯ÙØ§Ù ÙÙØªØ¹Ø§Ù ٠٠ع اÙÙØ§Ø¦Ù JSON:
JSON.stringifyÙØªØÙÙ٠اÙÙØ§Ø¦Ù Ø¥ÙÙ Ø¬ÙØ³ÙÙ.JSON.parseÙØªØÙÙÙ Ø§ÙØ¬ÙسÙ٠٠رة أخر٠إÙÙ ÙØ§Ø¦Ù.
عÙ٠سبÙ٠اÙÙ
Ø«Ø§ÙØ ÙÙØ§ ÙÙ
ÙØ§ بتØÙÙ٠اÙÙØ§Ø¦Ù student باستخداÙ
JSON.stringify:
let student = {
name: 'John',
age: 30,
isAdmin: false,
courses: ['html', 'css', 'js'],
wife: null
};
let json = JSON.stringify(student);
alert(typeof json); // ÙØ¯ÙÙØ§ ÙØµ!
alert(json);
/* JSON-encoded object:
{
"name": "John",
"age": 30,
"isAdmin": false,
"courses": ["html", "css", "js"],
"wife": null
}
*/
ØªØ³ØªÙØ¨Ù Ø§ÙØ¯Ø§ÙØ© JSON.stringify(student) ÙØ§Ø¦ÙÙØ§ ÙØªØÙÙÙ٠إÙÙ ÙØµ.
ÙØ§ÙØ¬ÙØ³Ù٠اÙÙØ§ØªØ¬ ع٠ذÙÙ ÙØ³Ù Ù JSON-encoded object Ø£Ù serialized object Ø£Ù stringified object Ø£Ù marshalled object. ÙØ§ÙØ¢Ù ÙÙ ÙÙÙØ§ Ø£Ù ÙØ±Ø³Ù٠ع٠طرÙÙ Ø§ÙØ´Ø¨ÙØ© Ø£Ù ÙØ¶Ø¹Ù ÙÙ Ù ÙØ§Ù ٠ا ÙØªØ®Ø²ÙÙ Ø§ÙØ¨ÙØ§ÙØ§Øª.
ÙØ§ØØ¸ أ٠اÙÙØ§Ø¦Ù اÙÙ ØÙÙÙÙ ÙØ®ØªÙ٠ع٠اÙÙØ§Ø¦Ù Ø§ÙØ¹Ø§Ø¯Ù Ù٠عدة ÙÙØ§Ø·:
- اÙÙØµÙص تستخدÙ
Ø§ÙØ¹ÙاÙ
ات اÙÙØµÙÙ
""ÙÙØ§ ØªÙØ¬Ø¯ Ø§ÙØ¹Ùا٠٠اÙÙ ÙØ±Ø¯Ù''Ø£Ù ÙØ°Ù. ÙØ¥Ù'John'ÙØªØÙ٠إÙÙ"John". - أسÙ
اء Ø§ÙØ®Ùاص Ù٠اÙÙØ§Ø¦Ù تÙÙÙ Ù
ØØ§Ø·Ù Ø¨Ø§ÙØ¹ÙاÙ
٠اÙÙØµÙÙ Ø§ÙØ«ÙØ§Ø¦ÙØ© Ø£ÙØ¶Ùا
"". ÙÙØ°ÙÙ ÙØ¥Ùage:30ÙØªØÙ٠إÙÙ"age":30.
ÙÙÙ
Ù٠استخادÙ
JSON.stringify Ù
ع اÙÙÙÙ
اÙÙ
ÙØ±Ø¯Ø© Ø£ÙØ¶Ùا ÙÙÙØ³ Ù
ع اÙÙØ§Ø¦Ùات ÙÙØ·.
ÙØ¯Ø¹Ù Ø§ÙØ¬ÙسÙ٠أÙÙØ§Ø¹ Ø§ÙØ¨ÙØ§ÙØ§Øª Ø§ÙØ¢ØªÙØ©:
- اÙÙØ§Ø¦Ùات
{ ... } - اÙÙÙØ§Ø¦Ù
(arrays)
[ ... ] - اÙÙÙÙ
اÙÙ
ÙØ±Ø¯Ø© (Primitives):
- اÙÙØµÙص (strings),
- Ø§ÙØ£Ø±Ùا٠,
- اÙÙÙÙ
اÙÙ
ÙØ·ÙÙÙ (booleans)
true/false, null.
عÙ٠سبÙ٠اÙ٠ثاÙ:
// Ø§ÙØ±ÙÙ
اÙÙ
ØÙÙÙ٠إÙÙ Ø¬ÙØ³ÙÙ Ù٠رÙÙ
Ø£ÙØ¶Ùا
alert(JSON.stringify(1)); // 1
// اÙÙØµ اÙÙ
ØÙÙÙ٠إÙÙ Ø¬ÙØ³ÙÙ ÙÙ ÙØµÙ Ø£ÙØ¶Ùا ÙÙÙÙ Ù
ØØ§Ø· Ø¨Ø¹ÙØ§Ù
Ø© Ø§ÙØªÙØµÙØµ Ø§ÙØ«ÙØ§Ø¦ÙØ© ""
alert(JSON.stringify('test')); // "test"
alert(JSON.stringify(true)); // true
alert(JSON.stringify([1, 2, 3])); // [1,2,3]
Ø§ÙØ¬ÙسÙÙ ÙØ³ØªØ®Ø¯Ù
Ø®ØµÙØµÙا ÙØ¹Ø±Ø¶ Ø§ÙØ¨ÙØ§ÙØ§Øª ÙÙØ· ÙÙØ°ÙÙ ÙØ¥Ù بعض خصائص اÙÙØ§Ø¦Ùات ÙÙ Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت ÙØªÙ
تخطÙÙØ§ Ø¹ÙØ¯ استخداÙ
JSON.stringify.
ÙÙÙ:
- Function properties (methods).
- Symbolic keys and values.
- Properties that store
undefined.
let user = {
sayHi() {
// ÙØªÙ
تجاÙÙÙØ§
alert('Hello');
},
[Symbol('id')]: 123, // ÙØªÙ
تجاÙÙÙØ§
something: undefined, // ÙØªÙ
تجاÙÙÙØ§
};
alert(JSON.stringify(user)); // {} (ÙØ§Ø¦Ù ÙØ§Ø±Øº)
عادة٠٠ا ÙÙÙÙ ÙØ°Ø§ Ø¬ÙØ¯Ù. ÙØ¥Ø°Ø§ ÙÙ ÙÙÙ ÙØ°Ø§ Ù Ø§ÙØ±ÙØ¯ÙØ إذا Ø³ÙØ±Ù ÙØ±ÙØ¨ÙØ§ ÙÙÙ ÙÙ ÙÙ Ø£Ù ÙØ¹Ø¯Ù ÙØ°Ù Ø§ÙØ¹Ù ÙÙØ© ÙØµØ§ÙØÙا.
Ø§ÙØ´Ø¦ Ø§ÙØ¬Ùد ÙÙØ§ أ٠اÙÙØ§Ø¦Ùات اÙÙ ÙØ¬Ùد٠بداخ٠أخر٠٠دعÙÙ Ø© ÙÙØªÙ تØÙÙÙÙØ§ تÙÙØ§Ø¦ÙÙØ§.
عÙ٠سبÙ٠اÙ٠ثاÙ:
let meetup = {
title: "Conference",
room: {
number: 23,
participants: ["john", "ann"]
}
};
alert( JSON.stringify(meetup) );
/* Ø§ÙØ´Ù٠باÙÙØ§Ù
٠تÙ
تØÙÙÙ٠إÙÙ ÙØµ:
{
"title":"Conference",
"room":{"number":23,"participants":["john","ann"]},
}
*/
ÙÙØ§Ù شئ Ù ÙÙ ÙÙ ÙØ¹ ÙØ°Ø§: ÙÙ٠أÙÙ ÙØ§Ø¨Ø¯ Ø£Ù ÙØ§ ÙØØªÙ٠اÙÙØ§Ø¦Ù عÙÙ ÙØ§Ø¦Ù ÙÙ Ø£ÙØ¶Ùا ÙØØªÙ٠عÙ٠اÙÙØ§Ø¦Ù Ø§ÙØ£ÙÙ.
عÙ٠سبÙ٠اÙ٠ثاÙ:
let room = {
number: 23
};
let meetup = {
title: "Conference",
participants: ["john", "ann"]
};
meetup.place = room; // meetup ÙØØªÙ٠عÙÙ room
room.occupiedBy = meetup; // room ÙØØªÙ٠عÙÙ meetup
JSON.stringify(meetup); // خطأ: Converting circular structure to JSON
ÙÙ ÙØ°Ù Ø§ÙØØ§ÙØ© ÙÙØ¶Ù Ø§ÙØªØÙÙÙ ÙÙØ°Ø§ بسبب Ø§ØØªÙاء ÙÙ ÙØ§Ø¦Ù عÙ٠آخر (circular reference): room.occupiedBy ØªØØªÙ٠عÙÙ meetupØ Ù meetup.place ØªØØªÙ٠عÙÙ room
Excluding and transforming: replacer
ÙÙÙÙØ© استخداÙ
JSON.stringify ÙÙ ÙØ§ÙآتÙ:
let json = JSON.stringify(value[, replacer, space])
- value
- Ù٠اÙÙÙÙ Ø© Ø§ÙØªÙ ستØÙÙÙÙ.
- replacer
- ÙØ§Ø¦Ù Ø© (array) Ù Ù Ø§ÙØ®ØµØ§Ø¦Øµ ÙØªØÙÙÙÙØ§ Ø£Ù Ø¯Ø§ÙØ© ÙØªÙÙÙØ°Ø¹Ø§ عÙÙ ÙÙ Ø®Ø§ØµÙØ©.
- space
- Ù٠اÙ٠ساÙÙ Ø§ÙØªÙ ÙØ¬Ø¨ Ø§Ø³ØªØ®Ø¯Ø§Ù ÙØ§ Ù Ù Ø£Ø¬Ù Ø§ÙØªÙظÙÙ .
ÙÙ Ø£ØºÙØ¨ اÙÙÙØª ØªÙØ³ØªØ®Ø¯Ù
JSON.stringify Ù
ع Ø£ÙÙ Ù
ØªØºÙØ± ÙÙØ·Ø ÙÙÙ٠إذا Ø£Ø±Ø¯ÙØ§ Ø£Ù ÙØªØÙÙ
ÙÙ ÙÙÙÙØ© عÙ
Ù ÙØ°Ù Ø§ÙØ¯Ø§ÙØ©Ø Ù
Ø«Ù Ø§ÙØªØÙÙ Ù
Ù ÙØ¬Ùد ÙØ§Ø¦Ù بداخ٠آخر ÙØØªÙ٠عÙÙ ÙØ°Ø§ اÙÙØ§Ø¦Ù ÙØ§ÙØ¹ÙØ³ (circular references)Ø Ø¥Ø°ÙØ§ ÙÙ
ÙÙÙØ§ استخداÙ
اÙÙ
ØªØºÙØ± Ø§ÙØ«Ø§ÙÙ ÙÙØ¯Ø§ÙØ© JSON.stringify.
إذا Ù Ø±Ø±ÙØ§ ÙØ§Ø¦Ù Ø© Ù Ù Ø§ÙØ®ØµØ§Ø¦Øµ ÙÙØ¯Ø§ÙØ©Ø ÙØ³Ùت٠تØÙÙÙ ÙÙÙ ÙØ°Ù Ø§ÙØ®ØµØ§Ø¦Øµ ÙÙØ·.
عÙ٠سبÙ٠اÙ٠ثاÙ:
let room = {
number: 23
};
let meetup = {
title: "Conference",
participants: [{name: "John"}, {name: "Alice"}],
place: room // meetup ÙØØªÙ٠عÙÙ room
};
room.occupiedBy = meetup; // room ÙØØªÙ٠عÙÙ meetup
alert( JSON.stringify(meetup, ['title', 'participants']) );
// {"title":"Conference","participants":[{},{}]}
ÙÙØ§ ÙØÙ Ù
ØÙدÙÙØ¯ÙÙ. ØÙØ« أ٠اÙÙØ§Ø¦Ù
Ø© اÙÙ
ÙÙ
رÙÙØ±Ø© ÙÙ ÙÙÙØ§Ø¦Ù بأÙÙ
ÙÙ ÙÙØ°ÙÙ ÙØ¥Ù اÙÙØ§Ø¦Ùات بداخ٠participants ÙØ§Ø±ØºØ© ÙØ£Ù Ø§ÙØ®Ø§ØµÙØ© name ÙÙØ³Øª Ù٠اÙÙØ§Ø¦Ù
Ø©.
ÙÙØ§ ÙØÙÙÙ ÙÙ Ø§ÙØ®ØµØ§Ø¦Øµ عدا room.occupiedBy ÙØ§Ùت٠ÙÙ
Ù٠أ٠تسبب اÙÙ
رجع Ø§ÙØ¯Ø§Ø¦Ø±Ù (circular reference):
let room = {
number: 23
};
let meetup = {
title: "Conference",
participants: [{name: "John"}, {name: "Alice"}],
place: room // meetup ÙØØªÙ٠عÙÙ room
};
room.occupiedBy = meetup; // room ÙØØªÙ٠عÙÙ meetup
alert( JSON.stringify(meetup, ['title', 'participants', 'place', 'name', 'number']) );
/*
{
"title":"Conference",
"participants":[{"name":"John"},{"name":"Alice"}],
"place":{"number":23}
}
*/
ÙÙ Ø´ÙØ¦ Ø§ÙØ¢Ù تÙ
تØÙÙÙ٠عدا occupiedByØ ÙÙÙ٠اÙÙØ§Ø¦Ù
Ø© Ø·ÙÙÙØ© ÙÙÙÙÙØ§.
ÙØØ³Ù Ø§ÙØØ¸Ø ÙÙ
ÙÙÙØ§ Ø£Ù ÙØ³ØªØ¹Ù
Ù Ø¯Ø§ÙØ© بدÙÙØ§ Ù
٠اÙÙØ§Ø¦Ù
Ø© ÙØªØ³Ù
ÙÙ replacer.
ÙØ°Ù Ø§ÙØ¯Ø§ÙØ© Ø³ÙØªÙ
Ø§Ø³ØªØ¯Ø¹Ø§Ø¤ÙØ§ ÙÙÙ Ø®Ø§ØµÙØ© ÙÙÙÙ
ØªÙØ§ ÙØ³ØªÙÙÙ
بإرجاع اÙÙÙÙ
Ø© âØ§ÙØ¨Ø¯ÙÙØ©â ÙØ§Ùت٠ستستخدÙ
بÙÙØ§ Ù
Ù Ø§ÙØ£ØµÙÙØ© أ٠ستÙÙÙ
بإرجاع undefined ÙÙÙÙÙ
Ø© Ø§ÙØªÙ Ø³ÙØªÙ
تخطÙÙØ§.
ÙÙ ØØ§ÙØªÙØ§ ÙØ°ÙØ ÙÙ
ÙÙÙØ§ Ø£Ù ÙÙÙÙ
بإرجاع اÙÙÙÙ
Ø© âÙÙ
ا ÙÙâ ÙÙ٠شئ عدا occupiedBy. ÙÙØªØ¬Ø§ÙÙ occupiedByØ Ø³ÙÙÙÙ
اÙÙÙØ¯ Ø§ÙØªØ§Ù٠بإرجاع undefinrd:
let room = {
number: 23,
};
let meetup = {
title: 'Conference',
participants: [{ name: 'John' }, { name: 'Alice' }],
place: room, // meetup ÙØØªÙ٠عÙÙ room
};
room.occupiedBy = meetup; // room ÙØØªÙ٠عÙÙ meetup
alert(
JSON.stringify(meetup, function replacer(key, value) {
alert(`${key}: ${value}`);
return key == 'occupiedBy' ? undefined : value;
})
);
/* key:value pairs that come to replacer:
: [object Object]
title: Conference
participants: [object Object],[object Object]
0: [object Object]
name: John
1: [object Object]
name: Alice
place: [object Object]
number: 23
occupiedBy: [object Object]
*/
ÙØ§ØØ¸ Ø£Ù Ø§ÙØ¯Ø§ÙØ© replacer ØªØ³ØªÙØ¨Ù ÙÙ Ø®Ø§ØµÙØ© ÙÙÙÙ
ØªÙØ§ بÙ
ا ÙÙÙØ§ Ù
Ù ÙØ§Ø¦Ùات Ù
ÙØ¶ÙÙ
ÙÙØ© ÙÙØ°ÙÙ Ø¹ÙØ§ØµØ± اÙÙØ§Ø¦Ù
Ø©. ØÙØ« Ø£ÙÙ Ø³ÙØªÙ
تÙÙÙØ°Ù بشÙÙ Ù
ØªÙØ±Ø±. ÙÙÙÙ
Ø©
this
Ø¯Ø§Ø®Ù Ø§ÙØ¯Ø§ÙØ©
replacer
ÙÙ ÙØ§Ø¦Ù ÙØØªÙ٠عÙÙ Ø§ÙØ®Ø§ØµÙØ© Ø§ÙØØ§ÙÙØ©.
Ø§ÙØ¥Ø³ØªØ¯Ø¹Ø§Ø¡ Ø§ÙØ£ÙÙ ÙÙØ¯Ø§ÙØ© خاص. ÙØ£ÙÙ ÙØªÙ
Ø¨ÙØ§Ø¦Ù خاص ÙØØªÙÙÙ {"": meetup}. Ø¨ØµÙØºØ© أخر٠ÙÙ
Ù٠أ٠ÙÙÙ٠أ٠أÙÙ Ø®Ø§ØµÙØ© بÙÙÙ
ØªÙØ§ ØªØØªÙ٠عÙÙ Ø®Ø§ØµÙØ© ÙØ§Ø±ØºØ© ÙØ§ÙÙÙÙ
Ø© Ù٠اÙÙØ§Ø¦Ù اÙÙ
Ø³ØªÙØ¯Ù تØÙÙÙ٠بأÙÙ
ÙÙ.ÙÙØ°Ø§ ÙÙÙ
Ø© Ø£Ù٠سطر ÙÙ ":[object Object]" Ù٠اÙÙ
Ø«Ø§Ù Ø£Ø¹ÙØ§Ù.
اÙÙÙØ±Ø© ÙÙ Ø£Ù ØªØ¹Ø·Ù ØµÙØ§ØÙات ÙÙØ¯Ø§ÙØ© replacer عÙÙ ÙØ¯Ø± اÙÙ
ستطاع: ØÙØ« Ø£Ù ÙØ¯ÙÙØ§ اÙÙØ±ØµÙ ÙÙØªØÙÙÙ ÙÙØ°ÙÙ Ø§ÙØ¥Ø³ØªØ¨Ø¯Ø§Ù Ø£Ù Ø§ÙØªØ®Ø·Ù ØØªÙ ÙÙÙØ§Ø¦Ù بأÙÙ
Ù٠إذا ÙØ§Ù ÙØ°Ø§ Ø¶Ø±ÙØ±ÙÙØ§.
Ø§ÙØªÙظÙÙ : اÙÙ Ø³Ø§ÙØ§Øª
اÙÙ
ØªØºÙØ± Ø§ÙØ«Ø§ÙØ« ÙÙØ¯Ø§ÙØ© JSON.stringify(value, replacer, space) Ù٠عدد اÙÙ
Ø³Ø§ÙØ§Øª ÙØ§Ø³ØªØ®Ø¯Ø§Ù
ÙØ§ ÙÙ Ø§ÙØªÙظÙÙ
.
سابÙÙØ§Ø ÙØ§Ùت Ù٠اÙÙØ§Ø¦Ùات اÙÙ
ÙØÙÙÙÙØ© Ø¥ÙÙ ÙØµÙص ÙØ§ ØªØØªÙ٠عÙÙ Ø£Ù ØªÙØ¸ÙÙ
. ÙÙØ°Ø§ ÙØ§Ù٠إذا ÙÙØ§ ÙØ±Ùد Ø£Ù ÙØ±Ø³Ù اÙÙØ§Ø¦Ù عبر Ø§ÙØ´Ø¨ÙØ©. ÙØ§ÙÙ
ØªØºÙØ± space ÙØ³ØªØ®Ø¯Ù
ØªØØ¯ÙØ¯ÙØ§ ÙØ·Ø¨Ø§Ø¹Ø© اÙÙØ§Ø¦Ù بشÙÙ Ù
ÙØ¸Ù
.
ÙÙØ§ space = 2 ØªÙØ®Ø¨Ø± Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت أ٠تعرض اÙÙØ§Ø¦Ùات Ø§ÙØ¯Ø§Ø®ÙÙØ© عÙÙ Ø³Ø·ÙØ± عدة Ù
ع Ù
Ø³Ø§ÙØ§Øª ÙØ§Ø±ØºØ© ØªÙØ¯Ø± بÙ
Ø³Ø§ÙØªÙ٠داخ٠اÙÙØ§Ø¦Ù:
let user = {
name: 'John',
age: 25,
roles: {
isAdmin: false,
isEditor: true,
},
};
alert(JSON.stringify(user, null, 2));
/* two-space indents:
{
"name": "John",
"age": 25,
"roles": {
"isAdmin": false,
"isEditor": true
}
}
*/
/* Ø¹ÙØ¯ استخداÙ
JSON.stringify(user, null, 4) ÙØ¥Ù اÙÙØªÙجة ØªØØªÙ٠عÙÙ Ù
Ø²ÙØ¯ Ù
٠اÙÙ
Ø³Ø§ÙØ§Øª اÙÙØ§Ø±ØºØ©:
{
"name": "John",
"age": 25,
"roles": {
"isAdmin": false,
"isEditor": true
}
}
*/
ÙÙØ³ØªØ®Ø¯Ù
اÙÙ
ØªØºÙØ± space ÙÙØØ¯Ù Ù
Ù Ø£Ø¬Ù Ø§ÙØ·Ø¨Ø§Ø¹Ø© بشÙÙ Ù
ÙØ¸Ù
.
The third argument can also be a string. In this case, the string is used for indentation instead of a number of spaces.
The space parameter is used solely for logging and nice-output purposes.
ÙÙ
ا Ø£ÙÙ ØªÙØ¬Ø¯ Ø¯Ø§ÙØ© toString ÙÙØªØÙÙ٠إÙÙ ÙØµØ ÙÙ
ÙÙ ÙØ£Ù ÙØ§Ø¦Ù Ø£Ù ÙØØªÙ٠عÙÙ Ø¯Ø§ÙØ© toJSON ÙÙØªØÙÙ٠إÙÙ Ø¬ÙØ³ÙÙ. ÙØªØ³ØªØ¯Ø¹ÙÙØ§ Ø§ÙØ¯Ø§ÙØ© JSON.stringify تÙÙØ§Ø¦ÙÙØ§ إذا ÙØ§Ùت Ù
ÙØ¬Ùدة.
عÙ٠سبÙ٠اÙ٠ثاÙ:
let room = {
number: 23
};
let meetup = {
title: "Conference",
date: new Date(Date.UTC(2017, 0, 1)),
room
};
alert( JSON.stringify(meetup) );
/*
{
"title":"Conference",
"date":"2017-01-01T00:00:00.000Z", // (1)
"room": {"number":23} // (2)
}
*/
ÙÙ
ÙÙÙØ§ Ø£Ù ÙØ±Ù ÙÙØ§ Ø£Ù date (1) Ø£ØµØ¨ØØª ÙØµÙا ÙÙØ°Ø§ ÙØ£Ù ÙÙ Ø§ÙØªÙØ§Ø±ÙØ® ØªØØªÙ٠عÙÙ Ø¯Ø§ÙØ© toJSON Ù
ÙØ¬Ùدة باÙÙØ¹Ù ÙØ§Ùت٠تÙÙÙ
بإرجاع ÙØ°Ø§ اÙÙÙØ¹ Ù
٠اÙÙØµÙص.
ÙÙØ§ ÙÙÙÙ
Ø¨Ø¥ÙØ´Ø§Ø¡ Ø¯Ø§ÙØ© toJSON Ù
خصصة ÙÙÙØ§Ø¦Ù room (2):
let room = {
number: 23,
toJSON() {
return this.number;
}
};
let meetup = {
title: "Conference",
room
};
alert( JSON.stringify(room) ); // 23
alert( JSON.stringify(meetup) );
/*
{
"title":"Conference",
"room": 23
}
*/
ÙÙ
ا ÙØ±Ù ÙÙØ§ ÙØ¥Ù Ø§ÙØ¯Ø§ÙØ© toJSON ÙÙ
Ù٠استخداÙ
ÙØ§ ع٠طرÙ٠استدعاء JSON.stringify(room) Ù
Ø¨Ø§Ø´Ø±Ø©Ù Ø£Ù Ø¹ÙØ¯Ù
ا ÙÙÙ٠اÙÙØ§Ø¦Ù room Ø¨Ø¯Ø§Ø®Ù ÙØ§Ø¦Ù آخر.
JSON.parse
ÙØ¥Ø±Ø¬Ø§Ø¹ اÙÙØ§Ø¦Ù اÙÙ ØÙÙÙ٠إÙÙ Ø¬ÙØ³ÙÙ Ù Ø±Ø©Ù Ø£Ø®Ø±Ù Ø³ÙØØªØ§Ø¬ Ø¥ÙÙ Ø¯Ø§ÙØ© أخر٠تس٠٠JSON.parse.
ÙÙÙÙØ© Ø§Ø³ØªØ®Ø¯Ø§Ù ÙØ§:
let value = JSON.parse(str, [reviver]);
- str
- اÙÙØµ اÙÙ ØÙÙÙÙ ÙØ¬ÙسÙÙ ÙØ¥Ø±Ø¬Ø§Ø¹Ù.
- reviver
- Ø¯Ø§ÙØ© Ø§Ø®ØªÙØ§Ø±ÙØ© ØªØ³ØªÙØ¨Ù Ø§ÙØ®Ø§ØµÙØ© ÙÙÙÙ ØªÙØ§ ÙØ§ÙØªÙ Ø³ÙØªÙ Ø§Ø³ØªØ¯Ø¹Ø§Ø¤ÙØ§ ÙÙÙ Ø®Ø§ØµÙØ© ÙÙÙÙ ØªÙØ§ ÙÙÙ ÙÙÙØ§ تØÙÙ٠اÙÙÙ Ø©.
عÙ٠سبÙ٠اÙ٠ثاÙ:
// ÙØ§Ø¦Ù
Ø© Ù
ØÙÙÙÙØ©
let numbers = '[0, 1, 2, 3]';
numbers = JSON.parse(numbers);
alert(numbers[1]); // 1
Ø£Ù ÙÙØ§Ø¦Ùات Ù ÙØ¶ÙÙ ÙÙÙØ© (nested objects):
let userData = '{ "name": "John", "age": 35, "isAdmin": false, "friends": [0,1,2,3] }';
let user = JSON.parse(userData);
alert(user.friends[1]); // 1
ÙÙ Ù٠أ٠ÙÙÙÙ Ø§ÙØ¬ÙسÙÙ Ù Ø¹ÙØ¯Ùا ØÙØ« ÙÙ ÙÙ Ø£Ù ØªØØªÙ٠اÙÙØ§Ø¦Ùات عÙÙ ÙØ§Ø¦Ùات Ø£Ù ÙÙØ§Ø¦Ù Ø£Ø®Ø±ÙØ ÙÙÙÙÙÙ ÙØ¬Ø¨ Ø£Ù ÙØªØ¨Ø¹Ù ÙÙØ³ ØªÙØ¸Ù٠اÙÙØ§Ø¦Ù Ø¬ÙØ³ÙÙ.
ÙÙØ§ بعض Ø§ÙØ£Ø®Ø·Ø§Ø¡ ÙØ¬ÙسÙ٠ت٠ت ÙØªØ§Ø¨ØªÙ باÙÙØ¯ (Ø£ØÙاÙÙØ§ ÙØØªØ§Ø¬ ÙÙØªØ§Ø¨ØªÙ ÙØ£ØºØ±Ø§Ø¶ Ø§ÙØ¨ØØ« Ø¹Ù Ø§ÙØ£Ø®Ø·Ø§Ø¡):
let json = `{
name: "John", // mistake: property name without quotes
"surname": 'Smith', // mistake: single quotes in value (must be double)
'isAdmin': false // mistake: single quotes in key (must be double)
"birthday": new Date(2000, 2, 3), // mistake: no "new" is allowed, only bare values
"friends": [0,1,2,3] // here all fine
}`;
Ø¥ÙÙ Ø¬Ø§ÙØ¨ ذÙÙØ ÙØ§ ÙØ¯Ø¹Ù Ø§ÙØ¬ÙسÙÙ Ø§ÙØªØ¹ÙÙÙØ§Øª (comments)Ø ØÙØ« Ø£Ù Ø¥Ø¶Ø§ÙØ© تعÙÙÙ ÙÙÙØ§Ø¦Ù Ø¬ÙØ³ÙÙ Ø³ÙØ¬Ø¹ÙÙ ØºÙØ± ØµØ§ÙØ.
ÙÙØ§Ù بÙÙÙØ© أخر٠تس٠٠JSON5 ÙØ§ÙØªÙ ØªØ³Ù Ø Ø¨Ø§ÙØ®ØµØ§Ø¦Øµ Ø§ÙØºÙر Ù ØØ§Ø·Ø© Ø¨Ø¹ÙØ§Ù Ø© Ø§ÙØªÙØµÙØµ Ø§ÙØ«ÙØ§Ø¦ÙØ© ÙØ§ÙتعÙÙÙØ§Øª ÙØºÙØ±ÙØ§Ø ÙÙÙÙ ÙØ°Ù Ù ÙØªØ¨Ø© أخر٠ÙÙÙØ³Øª ÙÙ Ù ÙØ§ØµÙات اÙÙØºØ©.
إ٠اÙÙØ§Ø¦Ù JSON ÙÙ Ù ØØ¯ÙÙØ¯ ÙØ°ÙÙ ÙÙØ³ ÙØ£Ù اÙÙ Ø·ÙÙÙØ±ÙÙ ÙØ³ÙÙÙÙ ÙÙÙÙ ÙÙØ³Ù Ø§Ø Ø¨Ø³Ø±Ø¹Ø© ÙØ³ÙÙÙØ© Ø®Ø·ÙØ§Øª Ø§ÙØªØÙÙÙ.
Ø§Ø³ØªØ®Ø¯Ø§Ù Ø§ÙØ¯Ø§ÙØ© reviver
تخÙÙ Ø£Ù ÙØ¯ÙÙØ§ ÙØ§Ø¦ÙÙØ§ Ù
ØÙÙÙ٠إÙÙ ÙØµ ÙØ³Ù
Ù meetup ÙØ§Ø¯Ù
Ù
Ù Ø§ÙØ³ÙØ±ÙØ±\Ø§ÙØ®Ø§Ø¯Ù
.
سÙÙÙÙ Ø¨ÙØ°Ø§ Ø§ÙØ´ÙÙ:
// title: (meetup title), date: (meetup date)
let str = '{"title":"Conference","date":"2017-11-30T12:00:00.000Z"}';
â¦ÙØ§ÙØ¢Ù Ø³ÙØØªØ§Ø¬ Ø¥Ù٠تØÙÙÙ٠إÙÙ ÙØ§Ø¦Ù عادÙ.
ÙÙØ§ ÙÙØ¹Ù ذÙ٠باستدعاء JSON.parse:
let str = '{"title":"Conference","date":"2017-11-30T12:00:00.000Z"}';
let meetup = JSON.parse(str);
alert( meetup.date.getDate() ); // خطأ!
ÙØ§ Ø¥ÙÙÙ! خطأ!
Ø¥Ù ÙÙÙ
Ø© meetup.date ÙÙ ÙØµ ÙÙÙØ³Øª ØªØ§Ø±ÙØ®Ø ÙÙÙ ÙÙ
ÙÙ ÙÙØ¯Ø§ÙØ© JSON.parse أ٠تعÙÙ
Ø£ÙÙØ§ ÙØ¬Ø¨ أ٠تØÙÙ ÙØ°Ø§ اÙÙØµ Ø¥ÙÙ ØªØ§Ø±ÙØ®Ø
ÙÙØ§ ÙÙ
رر Ø§ÙØ¯Ø§ÙØ© reviver Ø¥ÙÙ Ø§ÙØ¯Ø§ÙØ© JSON.parse ÙÙ
ØªØºÙØ± ثاÙÙ ÙØ§Ùت٠تÙÙÙ
بإرجاع ÙÙ Ø´ÙØ¦ ÙÙ
ا Ù٠عدا
date ستتØÙ٠إÙÙ ØªØ§Ø±ÙØ®:
let str = '{"title":"Conference","date":"2017-11-30T12:00:00.000Z"}';
let meetup = JSON.parse(str, function(key, value) {
if (key == 'date') return new Date(value);
return value;
});
alert( meetup.date.getDate() ); // ÙØ§ ÙÙØ¬Ø¯ خطأ Ø§ÙØ¢Ù!
ÙÙ٠تع٠٠٠ع اÙÙØ§Ø¦Ùات اÙÙ ÙØ¶ÙÙ ÙÙÙØ© Ø£ÙØ¶Ùا:
let schedule = `{
"meetups": [
{"title":"Conference","date":"2017-11-30T12:00:00.000Z"},
{"title":"Birthday","date":"2017-04-18T12:00:00.000Z"}
]
}`;
schedule = JSON.parse(schedule, function(key, value) {
if (key == 'date') return new Date(value);
return value;
});
alert( schedule.meetups[1].date.getDate() ); // تعÙ
Ù Ø¬ÙØ¯Ùا!
اÙÙ ÙØ®Øµ
- اÙÙØ§Ø¦Ù JSON ÙÙ Ø´ÙÙ Ù Ù Ø£Ø´ÙØ§Ù Ø§ÙØ¨ÙØ§ÙØ§Øª ÙØ§ÙØªÙ ØªØØªÙ٠عÙÙ ÙÙØ§Ø¹Ø¯Ùا ÙÙ ÙØªØ¨Ø§ØªÙا Ø§ÙØ®Ø§ØµØ© ÙØ£ØºÙب ÙØºØ§Øª Ø§ÙØ¨Ø±Ù جة.
- اÙÙØ§Ø¦Ù JSON ÙØ¯Ø¹Ù
اÙÙØ§Ø¦Ùات Ø§ÙØ¹Ø§Ø¯ÙØ© ÙØ§ÙÙÙØ§Ø¦Ù
ÙØ§ÙØ£Ø±ÙØ§Ù
ÙØ§ÙÙÙÙ
اÙÙ
ÙØ·ÙÙØ© ÙØ§ÙÙØµÙص ٠اÙÙÙÙ
Ø©
null. - ØªÙØ¬Ø¯ Ø¯ÙØ§Ù ÙÙ Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت JSON.stringify ÙØªØÙÙ٠اÙÙØ§Ø¦Ù Ø¥ÙÙ Ø¬ÙØ³ÙÙ Ù Ø£ÙØ¶Ùا JSON.parse ÙØªØÙÙÙ٠٠رة أخر٠إÙÙ ÙØ§Ø¦Ù.
- ÙÙØ§ Ø§ÙØ¯Ø§ÙتÙÙ ØªØ¯Ø¹Ù Ø§ÙØ¯ÙØ§Ù Ø§ÙØªÙ تØÙÙÙÙ Ù Ù ÙØ¥Ù٠بشÙ٠ذÙÙ.
- إذا ÙØ§Ù اÙÙØ§Ø¦Ù ÙØØªÙ٠عÙÙ Ø§ÙØ¯Ø§ÙØ©
toJSONØ Ø¥Ø°Ø§ Ø³ÙØªÙ Ø§Ø³ØªØ¯Ø¹Ø§Ø¤ÙØ§ ع٠طرÙÙ Ø§ÙØ¯Ø§ÙØ©JSON.stringify.
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)