JSON چیست؟ آموزش JSON
JSON یا JavaScript Object Notation شیوهای متنی از نگهداری اطلاعات ساختیافته است. با استفاده از جیسن میتوانید اطلاعات مختلف از جمله آرایهها، رشتهها، اعداد، متغیرهای بولی و اشیا را به شکلی قابل درک برای انسان و قابل درک برای ماشین ذخیرهسازی کنید و انتقال دهید.
شیوهی نگهداری اطلاعات JSON به دلیل وجود به صورت پیشفرض در زبان جاوااسکریپت به ویژه در هنگام طراحی سایت با انواع زبانها از جمله طراحی سایت با php و ASP.NET مورد استفاده قرار میگیرد.
چه تفاوتهایی بین JSON و XML وجود دارد؟
JSON در مقایسه با XML، سادهتر، سبکتر و خواناتر است. XML ساختار سلسله مراتبی پیچیدهتری دارد و برای ذخیره دادههای ساختاریافته مناسبتر است.
آیا JSON امن است؟
JSON به طور ذاتی امن نیست و میتواند برای تزریق کد مخرب مورد سوء استفاده قرار گیرد. برای ایمن نگه داشتن دادههای JSON، باید در نگهداری و ارسال و دریافت اطلاعات کدگذاری شده به شکل JSON، نکات ایمنی لازم را رعایت کنید تا خطری متوجه اطلاعات و نرمافزارهای شما نشود.
مثال نگهداری اطلاعات به شکل جیسون
در ادامه یک مثال از شیوهی نگهداری اطلاعات JSON را مشاهده میکنید:
1 2 3 4 |
var companies = [ { id: 1, name: 'roka' }, { id: 1, name: 'foo' } ]; |
در مثال بالا آرایهای از دو شیء با شیوهی JSON در یک متغیر ذخیرهسازی شده است.
قواعد ذخیرهسازی اطلاعات با فرمت جیسون
قوانین نگهداری دادهها با فرمت JSON عبارتند از:
- اشیا( Object ) در JSON باید میان آکولاد «{}» قرار بگیرند.
- اعضای شیء با علامت ویرگول«,» از هم جدا میشوند.
- آرایهها در JSON باید میان کروشه «[]» قرار بگیرند.
- اعضای آرایه با علامت ویرگول «,» از یکدیگر جدا میشوند.
- برای تعریف یک عضو در یک شیء JSON، ابتدا «نام عضو» سپس دونقطه«:» و در پایان «مقدار» نوشته میشود.
- نام اعضای شیء میبایست داخل دو گیومه «"» قرار بگیرند.
- مقدار میتواند یکی از انواع «عدد»، «رشته»، «بولی»، «آرایه»، «شیء» و «نال» را بپذیرد. سایر انواع داده باید به صورتی دیگر ذخیره شوند.
- انواع رشتهای باید داخل دو گیومه «"» قرار بگیرند.
- بسته به زبان مبدا و مقصد انواع دادهی دیگری نیز ممکن است قابل پذیرش باشند.
به مثالی کاملتر از نگهداری اطلاعات به فرمت JSON که تمامی قوانین در آن رعایت شده است توجه کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
var user_json = { "code" : 1234, "fname" : "ali", "lname" : "alavi", "favories" : [ "book", "sport", "travel", "eating" ] }; var years_json = [ 1395, 1396, 1397, 1398 ]; var months_json = { "1" : "فروردین", "2" : "اردیبهشت", "3" : "خرداد", "4" : "تیر" // ... }; |
استفاده از JSON در جاوااسکریپت
زبان جاوااسکرپیت بسیاری از محدودیتهای موجود در استاندارد JSON چشمپوشی میکند. برای مثال انواع داده در جاوااسکریپت به تمامی انواع دادهی قابل قبول در این زبان گسترش مییابد. قرار دادن نام اعضای شیء میان گیومه الزامی نیست. استفاده از گیومه یا آپستروف «'» برای رشتهها اختیاری است و بسیاری آزادیهای دیگر که تنها در این زبان قابل استفاده است.
چنانچه بخواهیم از JSON برای انتقال اطلاعات میان زبانهای مختلف استفاده کنیم، رعایت قوانین گفته شده در جهت عملکرد صحیح الزامی خواهد بود.
استفاده از JSON در جاوااسکریپت بسیار آسان است. برای خواندن اطلاعات ذخیره شده در یک متغیر به شکل زیر عمل میکنیم:
1 2 3 4 5 6 7 8 9 10 11 12 |
var years_json = [ 1395, 1396, 1397, 1398 ]; alert( years_json[ 1 ] ); var user = { "fname" : "ali", "surname" : "alavi" }; alert( user.fname ); // or alert( user[ "fname" ] ); |
در زبان جاواسکریپت، برای خواندن اعضای اشیا، هم با استفاده از نقطه «.» و هم به شکل آرایه «[]» میتوان به اعضای آن دسترسی پیدا کرد.
تبدیل JSON به رشته
برای اینکه بتوان اطلاعات را به شکل JSON منتقل یا ذخیرهسازی کرد، لازم است تا پیش از انتقال یا ذخیرهسازی به رشته تبدیل شود و پس از دریافت یا خواندن مجددا به اطلاعات تبدیل شود.
این تبدیل در زبان جاوااسکریپت به شکل زیر انجام میشود:
1 2 3 4 5 6 7 |
var roka = { "code" : "1234", "name": "roka" }; var json_string = JSON.stringify( roka ); alert( json_string ); // '{"code":"1234","name":"roka"}' |
برای تبدیل آرایه یا اشیا در زبانهای دیگر برنامهنویسی نیز اغلب دستورات یا کتابخانههایی موجود است. برای مثال در زبان php دستور json_encode به این منظور تعبیه شده است.
تبدیل رشته به JSON
پس از انتقال رشتهی JSON یا پس از بارخوانی آن از پایگاه داده، لازم است تا این رشته به شیئ یا آرایه تبدیل شود. انجام این کار در جاوااسکریپت به شکل زیر انجام میشود:
1 2 3 |
var json_string = '{"code":"1234","name":"roka"}'; var json = JSON.parse( json_string ); alert( json.name ); |
دستور JSON.parse به رعایت قوانین JSON حساس است و اگر یکی از این قوانین به درستی در رشته رعایت نشده باشد، این دستور با خطا مواجه خواهد شد.
JSON در jQuery
در جی کوئری علاوه بر دستورات jQuery.getJSON و jQuery.parseJSON که برای ارسال درخواست AJAX و تبدیل رشتهی JSON به شیء کاربرد دارند. یک ویژگی مفید در ارسال درخواستهای Ajax در jQuery تعبیه شده است. به این صورت که اگر نوع محتوای دریافتی «Content-Type» از نوع «application/json» باشد، جیکوئری به صورت خودکار آن را از حالت رشته به متغیر تبدیل میکند.
ایجاد خروجی از نوع JSON در php به شکل زیر امکانپذیر است:
1 2 3 4 5 |
<?php $data = array( /* ... */ ); header( 'Content-Type: application/json' ); echo json_encode( $data ); ?> |
انتقال اطلاعات حجیم
زبانهای نشانهگذاری مثل JSON و XML برای انتقال اطلاعات با حجم محدود اغلب مورد استفاده قرار میگیرند. ولی اگر حجم اطلاعات زیاد باشد، ممکن است استفاده از این روشها، کارایی لازم را نداشته باشد. در چنین شرایطی ممکن است گزینههای دیگر مثل پایگاه دادههای فایلی نظیر SQLite مورد توجه قرار بگیرند.
JSON Streaming چیست؟
JSON Streaming به روشی برای ارسال و دریافت دادههای JSON به صورت قطعات کوچک و متوالی به جای ارسال کل شیء JSON به یکباره اشاره دارد. این روش میتواند برای برنامههایی که با حجم زیادی از دادههای JSON سروکار دارند، مانند برنامههای چت یا برنامههای ردیابی زنده، مفید باشد.
روشهای بهکارگیری JSON Streaming
روشهای مختلفی برای استریم کردن JSON وجود دارد که بسته به زبان برنامهنویسی و ابزارهای در دسترس میتوان از آنها استفاده کرد. فریمورک لاراول ۱۰.۴۳ هم یک Response جدید برای ارسال استریم جیسون اضافه کرده است.
سلام
من یه ارایه رو تو پی اچ پی به رشته ی جیسون تبدیل کردم و تو جاوا اسکریپت خوندم
اما میخام بهم به جاای رشته تو خروجی عدد بده
از تابع JSON.parse هم برای اینکار استفاده می کنم جواب نمیده
اگه کسی میدونه راهنماییم کنه
با سلام
یا باید موقع ارسال اطلاعات از php دقت کنید که نوع دادهها عددی باشند یا موقع پردازش در سمت جاوااسکریپت آنها را به صورت صریح با استفاده از کلاس Number به عدد تبدیل کنید