جیسون یا جیسان چیست - JSON - JavaScript Object Notation
جیسان یا JSON (JavaScript Object Notation) یک فرمت تبادل داده سبک (lightweight) میباشد که خواندن و نوشتن آن برای انسان و تولید و پارس کردن آن برای ماشینها آسان است.
این زبان بر مبنای یک زیرمجموعه از زبان برنامهنویسی JavaScript، استاندارد ECMA-262 ویرایش سوم - دسامبر 1999، است.
JSON به صورت متنی (text) بوده و کاملاً مستقل از زبان بهکار رفته است، اما از قوانینی استفاده میکند که برای برنامهنویسان زبانهای خانواده C (شامل C، C++، Java، JavaScript، Perl، Python، و بسیاری زبانهای دیگر) آشنا میباشد. این خصوصیات JSON را یک زبان تبادلدادهای ایدهآل کرده است.
چرا JSON؟
ویژگیهای JSON آن را به یک فرمت تبادل داده ایدهآل تبدیل میکنند:
- متنباز و سبک: صدور و مصرف آن کمحجم است و لزوماً به کتابخانههای سنگین نیاز ندارد.
- قابل خواندن توسط انسان: نگارش آن ساده و نزدیک به ساختارهای برنامهنویسی معمول است.
- قابل پارس شدن توسط ماشین: انواع دادهای ساده و قواعد مشخصی دارد که پیادهسازی parser را آسان میکند.
- مستقل از زبان: پشتیبانی توسط زبانهای متعددی دارد و انتقال داده بین محیطهای گوناگون را آسان میسازد.
ساختارها و نوعهای داده در JSON
JSON بر مبنای دو ساختار دادهای اصلی ساخته شده است:
- یک مجموعه از زوجهای نام/ارزش (name/value). در زبانهای گوناگون این ساختار یک شیء (object)، ساختار (struct)، دیکشنری (dictionary)، جدول مخلوط (hash table)، لیست کلیددار (keyed list) یا آرایه انجمنی (associative array) شناخته میشود.
- یک لیست منظم از ارزشها. در بسیاری از زبانها این ساختار یک آرایه (array)، بردار (vector)، لیست (list)، یا دنباله (sequence) شناخته میشود.
در JSON از فرمهای زیر استفاده میشود:
۱. شیء (object)
یک مجموعه نامنظم از زوجهای نام/ارزش که با { } در برگرفته شدهاند. در انتهای هر نام یک : (دو نقطه) قرار میگیرد و زوجهای نام/ارزش با , (ویرگول) جدا میشوند.
{
"name": "Ali",
"age": 30,
"married": true
}
۲. آرایه (array)
یک فهرست مرتب از مقادیر که بین [ ] قرار گرفتهاند.
["apple", "banana", "cherry"]
نوعهای داده در JSON
یک ارزش (value) در JSON میتواند یکی از موارد زیر باشد:
- رشته (string): متنی بین
"..."با یونیکد و پشتیبانی escape. - عدد (number): مشابه C یا Java، فقط به شکل اعشاری.
- بولین (boolean):
trueیاfalse. - تهی (null): نشاندهنده نبود مقدار.
- شیء یا آرایه: میتوانند بهصورت تو در تو باشند.
فضای خالی (whitespace) بین نشانهها مجاز است و تأثیری بر ساختار ندارد.
قواعد نگارش و سینتکس (Syntax)
یک object با { (آکولاد باز) شروع، و با } (آکولاد بسته) تمام میشود. در انتهای هر نام یک : (دو نقطه) قرار میگیرد و زوجهای نام/ارزش با , (ویرگول) جدا میشوند.
{ "a": 1, "b": 2 }
یک array با [ (براکت باز) شروع، و با ] (براکت بسته) تمام میشود. ارزشها توسط , (ویرگول) از هم جدا میشوند.
[1, "two", null]
مثالهای واقعی از JSON
مثال ۱
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"GlossDef": {
"para": "A metamarkup language...",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
مثال ۲
{
"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{ "value": "New", "onclick": "CreateNewDoc()" },
{ "value": "Open", "onclick": "OpenDoc()" },
{ "value": "Close", "onclick": "CloseDoc()" }
]
}
}
}
مزایا و محدودیتها
مزایا
- خوانایی بالا و شباهت زیاد به دیکشنری در زبانهای ساختیافته.
- پشتیبانی گسترده در REST API، Ajax و ذخیرهسازی مرورگر.
- تبادل داده سریع و سبک بین سرویسها.
محدودیتها
- عدم پشتیبانی از کامنت، برخلاف JSON5 یا YAML.
- قابلیت ذخیره فقط داده خام، نه کد یا تاریخچه.
- مسائل امنیتی هنگام استفاده نادرست از
eval()در JavaScript (باید ازJSON.parse()استفاده شود).
نحوه استفاده در توسعه نرمافزار
- خواندن (parse): تبدیل متن JSON به ساختار دادهای زبان مقصد (مثلاً
json.loads()در Python). - نوشتن (serialize): تبدیل داده ساختارمند به متن JSON (مثلاً
JSON.stringify()در JavaScript). - ارسال و دریافت از APIها: اغلب APIهای REST از JSON استفاده میکنند؛ معمولاً همراه با
Content-Type: application/json.