PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آشنایی با json



sheitonakshirazi
February 1st, 2012, 11:56
یکی از مباحثی که همیشه در برنامه ها و سرویس های تحت وب مطرح بوده، انتقال اطلاعات بین برنامه های سرویس دهنده و سرویس گیرنده است. این که چگونه این اطلاعات انتقال پیدا کند و کمترین هزینه زمانی را دربرداشته باشد. با ظهور وب، سرویس ها و پروتکل soap اطلاعات به صورت فایل هایxml بین شبکه انتقال می یافت، اما به مرور فرمت های دیگر نیز برای انتقال اطلاعات تولید شدند که همانند soap بر مبنای متن بودند و علاوه بر پشتیبانی از تمامی بستر های توسعه نرم افزار، نرخ انتقال آن نیز بهبود یافت.
یکی از این فرمت ها json بوده که سر واژه عبارت javascript object notation است. json به قدری ساده و قابل فهم است که اصطلاحا به آن human readable (قابلیت خواندن توسط انسان) را اطلاق می کنند. سرچشمه json از ارائه یک ساختار داده ساده و مربوط به ارائه نشات می گیرد. بعد از موفقیت json و ظهور سرویس های rest و همین طور json ،ajax توانست جای خوبی برای پیشرفت خود باز کند. در حال حاضر اکثر سرویس های سمت وب از xml و json برای خروجی اطلاعاتی خود استفاده می کنند که معروف ترین آنها twitter api است.
برای مطالعه بیشتر در مورد json می توانید به لینک «1» مراجعه کنید.
فایل های json با پسوند json شناخته می شوند، البته هیچ الزامی برای مشخص کردن پسوند فایل نیست؛ برای مثال شما می توانید داده های خروجی خود را به صورت json بدهید بدون این که فایل json درخواست شود.
همین طور mimetype فایل هایjson با application/json مشخص می شود، در حال حاضر بیشتر زبان های برنامه نویسی دارای کلاس هایی برای تبدیل نوع داده های خود به فرمت json هستند و همین طور برعکس. بگذارید این مساله را با یک مثال بیان کنیم. کد زیر را که با php نوشته شده است در نظر بگیرید.
class test{
public $id;
public $name;
public $status;
}
$test = new test();
$test-»id = 1;
$test-»name = "click!";
$test-»status = false;
$json = json-encode($test);
echo $json;
$fromjson = json-decode($json);
var-dump($fromjson);
ما ابتدا یک کلاس به نام test تعریف کردیم که دارای 2 فیلد یکی به نام id و دیگری name و status است، سپس یک شیء از آن ساختیم و آن را مقداردهی کردیم. با استفاده از تابع json-encode آن را به یک ساختار داده json تبدیل کرده ایم که خروجی آن به صورت زیر است:
{"id:1,"name":"click!","status":false”}
همان طور که می بینید یک فرمت ساده و قابل فهم است و شما براحتی می توانید داده های خروجی خود را در سمت سرور به صورت json به سرویس گیرنده بدهید و اصطلاحا داده های خود را serialize کنید به فرمت json. این کاری است که تابع json-encode انجام می دهد. بعضی مواقع لازم است شما داده های خود را از یک سرویس بگیرید که در آن صورت باید داده های json را در برنامه خود parse (تحلیل) کنید. برای این کار همان طور که می بینید از تابع json-decode استفاده شده که خروجی json را به یک کلاس از نوع test تبدیل کرده است. به این کار اصطلاحا deserialize کردن می گویند.
مرسوم است برای این که این کار راحت تر انجام شود، از یک سری ساختار داده برای ذخیره سازی اطلاعات استفاده می کنند و سپس ساختار داده را serialize می کنند، اما خب همیشه و در همه جا نمی توان از این روش استفاده کرد.
بگذارید قدری خروجی کد بالا را بررسی کنیم. همان طور که مشاهده می کنید یک ساختار کلید/ مقدار است، کلیک نام فیلد و مقدار هم مقدار آن فیلد است. همان گونه که در مثال بالا مشاهده می کنید id:1 یعنی یک فیلد به نام id وجود دارد که مقدار آن 1 است و همین طور بقیه داده ها و مقدار نیز می تواند مقادیر متفاوتی داشته باشد. تعریف ساختاری کلی برای json به صورت زیر است: یک { باز، سپس به ازای هر نوع فیلد یک رشته متنی، سپس مقدار فیلد که خود مقدار فیلد می تواند مقادیر زیر را اتخاذ کند:
عدد، یک شیء، ارائه ای از یک شیء یا از یک نوع داده خاص، رشته متنی، مقدار boolean که به صورتtrue-false ذخیره می شود، null که نشان می دهد آن فیلد مقدار ندارد.
در مورد null در زمان deserialize کردن، با توجه به زبانی که در آن دارید این کار را انجام می دهید و مقادیر متفاوتی جایگزین می شود؛ به طور مثال در #c مقدار پیشفرض آن نوع داده محسوب می شود.
نکته ای که باید به آن دقت کرد این است که یک کلاس می تواند با کلاس های دیگر نیز در ارتباط باشد. این ارتباط در خروجی json نیز وجود خواهد داشت، که باز بستگی به نوع روابطی دارد که بین کلاس ها وجود دارد و در خروجی می آید.
به عنوان مثال یک کلاس شامل یک مجموعه از یک کلاس دیگر است. اگر قرار است خروجی serialize شود، تمامی کلاس هایی که با این کلاس در ارتباط هستند نیز serialize می شوند. در زمان deserialize کردن نیز آن فیلدی که نشان دهنده یک کلاس در کلاس دیگر است نیز در خروجی می آید منتها با قدری تغییر در کد php که بالا نوشته شده است (آزمایش این کار به عهده خواننده است).
برای آشنایی بیشتر با ساختار داده json و همچنین کتابخانه هایی که برای زبان های مختلف برای آن نوشته شده است، می توانید به لینک زیر رجوع کنید.
http://www.json.org/ (http://itshenas.com/goto/?url=http%3A%2F%2Fwww.json.org%2F)