JSON

همونطور که از شروع این کارگاه تا الان از جاوا اسکریپت استفاده کردید، دیگه باید با ساختار JSON احساس راحتی کنید، چون که JSON هم برگرفته از جاوا اسکریپت هست و ساختارش نزدیک به آبجکت های جاوا اسکریپته که توی فصل های قبل باهاشون کار کردیم. JSON که شبیه اسم Jason تلفظ میشه، سبکه، خوندن و نوشتنش برای انسان ها راحته و برای ماشین ها هم parse کردن و کار کردن باهاش راحته.

دو تا ساختار دیتای اصلی توی JSON استفاده میشه:

  • مجموعه ای جفت های key/value قرار داده شده داخل { }
  • لیستی از مقدار های قرار داده شده در [ ]

در زیر یک نمونه آبجکت JSON هست که ساختار ها و مقدار هایی از گونه های مختلف رو نشون میده:

کد فایل sample_json.json


{
 "twitter_username": "@LeoDiCaprio",
 "first_name": "Leonardo",
 "last_name": "DiCaprio",
 "famous_movies": [{
  "title": "Titanic",
  "director": "James Cameron",
  "costars": [
   "Kate Winslet",
   "Billy Zane"
  ],
  "year": 1997
 },
 {"title": "The Great Gatsby",
  "director": "Baz Luhrmann",
  "costars": [
   "Tobey Maguire",
   "Carey Mulligan",
   "Joel Edgerton"
  ],
  "year": 2013
 }
 ],
 "active": true,
 "eye_color": null
}


هر جفت key/value دارای یک key قرار گرفته بین دو " "، مثل "key" هست و بین key و value یک دونقطه قرار گرفته. برای مثال نمونه زیر اشتباهه، چون key بین " " قرار نگرفته:

first_name: "Leonardo"

مقدار هر key توی آبجکت ها باید منحصر به فرد و غیرتکراری باشه، key ها میتونن هر متن معتبری باشن و حاوی کاراکتر فاصله (space character) هم باشن (گرچه ممکنه این همیشه ایده خوبی نباشه، چون توی برنامه نویسی همیشه کار با استفاده از کاراکتر های دیگه مثل underline ( _ ) بجای کاراکتر هایی مثل فاصله راحت تر میشه). هر جفت key/value با یک کاما جدا میشه.

مقدار (value) ها میتونن از انواع زیر باشن:

  • String: مثل قسمت "twitter_username": "@LeoDiCaprio" توی مثالی که بالا تر از کد یک فایل JSON قرار دادیم. این مقدار ها بین " " قرار میگیرن.
  • Number: مثل قسمت "year": 1997 توی مثال بالا. همچنین میشه توشون از علامت های مثبت و منفی هم استفاده کرد. عدد/number ها بین " " قرار نمیگیرن.
  • Boolean (true / false): مثل قسمت "active": true توی مثال بالا (این مقدار ها هم بین " " قرار نمیگیرن)
  • Nested Array (آرایه تودرتو): این مقدار خودش دارای آرایه ای از متن ها هست. هر کدوم از متن های داخل این آرایه بین " " قرار میگیرن و با کاما از هم جدا میشن. توی مثال زیر آرایه ای از بازیگرهای مختلف وجود داره:

"costars": [
"Kate Winslet",
"Billy Zane"
],

  • Nested object (آبجکت تودرتو): مثل آیتم های لیست famous_movies توی مثال بالا. هر آیتم توی آرایه یک آبجکت تو در تو هست که دارای فیلد های مربوط به یک فیلم هست، از جمله title ،director ،costars و year. آبجکت های داخل این آرایه با کاما از هم جدا شدن.
  • Null: مثل قسمت "eye_color": null در مثال بالا. از null میشه به عنوان یک مقدار ناشناخته یا غیرقابل اجرا استفاده کرد. این مقدار بین " " قرار نمیگیره.


نکته: یه سری اما و اگر هایی توی این موقعیت ها (مقدار null) وجود داره و بعضی ها میگن که اگه یک مقدار ناشناخته هست، اصلا فیلد مربوط بهش نباید وجود داشته باشه، چه برسه به اینکه مقدار null بهش اختصاص داده باشه. با این حال بخاطر هدف این کارگاه، ما وارد این جزئیات نمیشیم.


کاراکتر های whitespace (مثل کاراکتر فاصله، تب ها، و کاراکتر خط چدید (carriage return character)) معمولا توی JSON نادیده گرفته میشن (به غیر از زمانی که توی متن (string) ها استفاده شده باشن) و میشه آزادانه ازشون برای افزایش خوانایی کد استفاده کرد.

یه سری محدودیت های مهمی توی ساختار JSON وجود دارن:

  • مقدار ها باید از انواع مقدار های ذکر شده در بالا باشن و نمیتونن حاوی محاسبات پیچیده و فراخوانی های فانکشن ها باشن.
  • نمیشه از کامنت ها در اونها استفاده کرد.