متد JSON.parse()

از ویکی‌کد، دانشنامهٔ برنامه‌نویسی
پرش به ناوبری پرش به جستجو
Main Page Tutorial
JavaScript-menu.png
موارد آموزشی
فرم‌ها در جاوا اسکریپت
تعریف شیء در جاوا اسکریپت
تابع در جاوا اسکریپت
HTML DOM در جاوا اسکریپت
Browser BOM در جاوا اسکریپت
AJAX در جاوا اسکریپت
JSON در جاوا اسکریپت
۱مقدمه
۲شیوهٔ نوشتار
۳JSON در برابر XML
۴داده‌های مجاز
۵متد JSON Parse
۶متد JSON Stringify
۷اشیاء
۸آرایه‌ها
۹PHP در JSON
۱۰HTML در JSON
۱۱JSONP
جی‌کوئری در برابر جاوا اسکریپت
مثال‌های جاوا اسکریپت
مرجع جاوا اسکریپت

یک استفاده رایج از JSON برای تبادل داده از یا با یک وب سرور است. [۱]

هنگامی که داده‌ای از یک وب سرور دریافت می‌کنید، داده همیشه یک رشته متنی است.

داده را با استفاده از متد JSON.parse() تبدیل کنید و داده به یک شیء جاوا اسکریپت تبدیل می‌شود.

مثال - تبدیل JSON

تصور کنید ما این متن را از یک وب سرور دریافت کرده‌ایم:

'{ "name":"John", "age":30, "city":"New York"}'

از تابع JSON.parse() برای تبدیل این متن به یک شیء جاوا اسکریپت استفاده کنید:

var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}');
اطمینان حاصل کنید که متن به صورت JSON نوشته شده باشد، درغیر اینصورت شما خطای نوشتار دریافت خواهید کرد.

از این شیء جاوا اسکریپت در صفحه خود استفاده کنید:

مثال

1 <p id="demo"></p>
2 
3 <script>
4 document.getElementById("demo").innerHTML = obj.name + ", " + obj.age;
5 </script>


مشاهدهٔ نتیجه


JSON از سمت سرور

شما می‌توانید با استفاده از یک درخواست AJAX از سرور یک JSON را تقاضا کنید.

تا زمانی که نتیجه در سرور در قالب JSON نوشته می‌شود، شما می‌توانید رشته متنی دریافتی را به یک شیء جاوا اسکریپت تبدیل کنید.

مثال

استفاده از XMLHttpRequest برای دریافت اطلاعات از سمت سرور:

1 var xmlhttp = new XMLHttpRequest();
2 xmlhttp.onreadystatechange = function() {
3   if (this.readyState == 4 && this.status == 200) {
4     var myObj = JSON.parse(this.responseText);
5     document.getElementById("demo").innerHTML = myObj.name;
6   }
7 };
8 xmlhttp.open("GET", "json_demo.txt", true);
9 xmlhttp.send();


مشاهدهٔ نتیجه


نگاهی به فایل json_demo.txt بیندازید.

آرایه همانند JSON

زمانی که از متد JSON.parse() روی یک JSON مشتق شده از یک آرایه استفاده می‌کنید، متد به جای برگرداندن یک شیء جاوا اسکریپت، یک ارایه جاوا اسکریپت را برمی‌گرداند.

مثال

JSON ی که از سرور برگردانده شده یک آرایه است:

1 var xmlhttp = new XMLHttpRequest();
2 xmlhttp.onreadystatechange = function() {
3   if (this.readyState == 4 && this.status == 200) {
4     var myArr = JSON.parse(this.responseText);
5     document.getElementById("demo").innerHTML = myArr[0];
6   }
7 };
8 xmlhttp.open("GET", "json_demo_array.txt", true);
9 xmlhttp.send();


مشاهدهٔ نتیجه


نگاهی به فایل json_demo_array.txt بیندازید.

خطاها

تبدیل تاریخ و زمان

استفاده از اشیاء تاریخ و زمان در JSON مجاز نیست.

اگر شما می‌خواهید که یک تاریخ را بنویسید، می‌بایست آن را به صورت متنی (به انگلیسی: String) بنویسید.

شما بعداً می‌توانید آن را دوباره به یک شیء تاریخ و زمان تبدیل کنید:

مثال

تبدیل یک رشته متنی به یک شیء تاریخ و زمان:

1 var text = '{ "name":"John", "birth":"1986-12-14", "city":"New York"}';
2 var obj = JSON.parse(text);
3 obj.birth = new Date(obj.birth);
4 
5 document.getElementById("demo").innerHTML = obj.name + ", " + obj.birth;


مشاهدهٔ نتیجه


و یا شما می‌توانید از پارامتر دوم تابع JSON.parse() که reviver نامیده می‌شود استفاده کنید.

پارامتر reviver تابعی است که هر ویژگی را قبل از برگرداندن آن بررسی می‌کند.

مثال

تبدیل یک رشته متنی به یک شیء تاریخ و زمان با استفاده از پارامتر reviver تابع:

 1 var text = '{ "name":"John", "birth":"1986-12-14", "city":"New York"}';
 2 var obj = JSON.parse(text, function (key, value) {
 3   if (key == "birth") {
 4     return new Date(value);
 5   } else {
 6     return value;
 7   }
 8 });
 9 
10 document.getElementById("demo").innerHTML = obj.name + ", " + obj.birth;


مشاهدهٔ نتیجه


تبدیل توابع

استفاده از توابع در JSON مجاز نیست.

اگر شما می‌خواهید یک تابع را بنویسید، شما می‌بایست آن را به صورت یک رشته متنی بنویسید.


شما می‌توانید بعداً آن را به یک تابع تبدیل کنید:

مثال

تبدیل یک رشته متنی به یک تابع:

1 var text = '{ "name":"John", "age":"function () {return 30;}", "city":"New York"}';
2 var obj = JSON.parse(text);
3 obj.age = eval("(" + obj.age + ")");
4 
5 document.getElementById("demo").innerHTML = obj.name + ", " + obj.age();


مشاهدهٔ نتیجه


شما باید از استفاده از توابع درجیسون پرهیز کنید، توابع ناحیه کد خود (به انگلیسی: Scope) خود را از دست خواهند داد و شما مجبور خواهید بود تا از تابع eval() برای تبدیل دوباره آنها به توابع استفاده کنید.

سازگاری با مرورگرها

تابع JSON.parse() در تمامی مرورگرها و آخرین نسخه استاندارد ECMAScript (جاوا اسکریپت) وجود دارد.

اعداد موجود در جدول زیر اولین نسخه مرورگرهایی که به طور کامل از تابع JSON.parse() پشتیبانی می‌کنند را مشخص می‌کند:

Chrome.gif Edge.gif Firefox.gif Safari.gif Opera.gif
بله ۸٫۰ ۳٫۵ ۴ ۱۰٫۰


برای مرورگرهای قدیمی‌تر، یک کتابخانه جاوا اسکریپت به آدرس https://github.com/douglascrockford/JSON-js در دسترس است.


منابع آموزشی