Json
@BotSorceاول ! JSON چیست ؟
json مخفف JavaScript Object Notation میباشد که روش نشانه گذاری آبجکت ها میباشد و از آن برای ذخیره سازی سازی اطلاعات و دیتا ها استفاده میشود.
JSON از XML بسیار ساده تر و در اکثر مواقع کم حجم تر میباشد ! .Json بر خلاف نامش در تمام زبان ها کاربرد دارد و روشی برای تبادل اطلاعات بین زبان های مختلف هم به حساب می آید . فرض کنید یک آرایه در زبان PHP دارید ، راحت با تبدیل آن به Json میتوانید در جاوا از آن ارایه استفاده کنید . یکی از مزایای Json تبدیل حروف به یونیکد هست یعنی فارسی را به بهترین شکل ساپورت میکند !
ساختار یک JSON
شما در JSON با علامت های [ ] , { } بسیار سروکار دارید . شما اگر بخواهید یک آبجکت داشته باشید از { } استفاده میکنید و زمانی که میخواهید یک آرایه داشته باشید از [ ] استفاده میکنید . برای مثال فرض کنید کد XML زیر رو میخواید به JSON تبدیل کنید :
<musics>
<music>
<title> Title of music #1 </title>
<desc> Description of music #1</desc>
<year> Year of music #1</year>
</music>
<music>
<title> Title of music #2 </title>
<desc> Description of music #2</desc>
<year> Year of music #2</year>
</music>
</musics>
کد json :
{
"musics":[
{"title":"Title of music #1","desc":"Description of music #1","year":"Year of music #1"},
{"title":"Title of music #2","desc":"Description of music #2","year":"Year of music #2"}
]
}
میبینید که زمانی که بخواید یک آرایه از یک سری آبجکس داشته باشید از [ ] و زمانی که یک آبجکت داشته باشیم از { } استفاده میکنیم .
تبدیل JSON به متغیر و متغیر به JSON در زبان های مختلف
شما در زبان PHP و Javascript کار راحتی دارید و در اندروید-جاوا یکم دردسر دارید ولی بزودی به آموزش Gson کمی مشکل کار رو کم میکنیم !
در PHP
برای این کار در PHP ما ۲ تابع به نام های json_encode و json_decode داریم ( خیلی هم خوب ! ) . برای مثال :
$array = array(
"users"=>array(
array("username"=>"Admin","password"=>"1234"),
array("username"=>"Polic","password"=>"12345"),
array("username"=>"Amir","password"=>"12324"),
)
);
echo json_encode($array);
و خروجی :
{"users":[{"username":"Admin","password":"1234"},{"username":"Polic","password":"12345"},{"username":"Amir","password":"12324"}]}
حالا فرض کنید همین خروجی رو دوباره میخوایم به یک متغیر تبدیل کنیم برای این کار از json_decode استفاده میکنیم :
var_dump( json_decode('{"users":[{"username":"Admin","password":"1234"},{"username":"Polic","password":"12345"},{"username":"Amir","password":"12324"}]}'));
خروجی :
object(stdClass)#1 (1) {
["users"]=>
array(3) {
[0]=>
object(stdClass)#3 (2) {
["username"]=>
string(5) "Admin"
["password"]=>
string(4) "1234"
}
[1]=>
object(stdClass)#2 (2) {
["username"]=>
string(5) "Polic"
["password"]=>
string(5) "12345"
}
[2]=>
object(stdClass)#4 (2) {
["username"]=>
string(8) "Amir"
["password"]=>
string(5) "12324"
}
}
}
فقط به نوع خروجی توجه کنید ، ما یک آرایه عادی داشتیم ولی خروجی Object بود یعنی قبلا $array[“users”] جواب میداد الان $array->users به این نکته توجه کنید .
در جاوااسکریپت
ما در جاوااسکریپت یک آبجکت به نام JSON داریم که ۲ متد stringify و parse برای ما مهم هستند ، متد stringify متغیر رو به رشته ی json و parse جیسون رو به متغیر تبدیل میکند . برای مثال :
<script>
var object2 = {
"users":[
{"username":"user1",
"password":"pass1"},
{"username":"user2",
"password":"pass2"},
]
};
console.log(object2);
console.log(JSON.stringify(object2));
console.log(JSON.parse(JSON.stringify(object2)));
</script>
خروجی :
یکم توجه کنید متوجه میشید که متن JSON ما دقیقا با آرایه JS ما یکی هست . اگر برایتان این مسئله مبهم هست به جزئیات نام JSON دوباره یک توجهی بکنید .
میبینید که JSON به همین راحتی کمک بزرگی به ما میکند درحالی که بسیار کم حجم تر و ساده تر از XML میباشد .