JSON (JavaScript Object Notation) — یک فرمت متنی سبک برای تبادل داده است که بر اساس نحو اشیاء JavaScript ساخته شده است. در همه جا استفاده میشود: از REST API و فایلهای پیکربندی گرفته تا ذخیرهسازی دادهها در پایگاههای داده و برنامههای موبایل. به گزارش وبسایت رسمی JSON، این فرمت به زبان برنامهنویسی وابسته نیست و تقریباً توسط تمام پلتفرمهای مدرن پشتیبانی میشود. JSON به استاندارد دوفاکتو برای انتقال داده بین کلاینت و سرور تبدیل شده است.
نکات اصلی
JSON — یک فرمت متنی برای نمایش دادههای ساختاریافته بر اساس نحو JavaScript است. علیرغم ریشهاش در JavaScript، این فرمت کاملاً مستقل از زبان است — تجزیهگرها و سریالسازها برای همه زبانهای برنامهنویسی محبوب وجود دارند.
تاریخچه JSON از اوایل دهه 2000 آغاز شد، زمانی که داگلاس کراکفورد زیرمجموعهای از نحو JavaScript را برای تبادل داده جدا کرد. در سال 2013 این فرمت به عنوان ECMA-404 و بعداً به عنوان ISO/IEC 21778:2017 استاندارد شد. نام آن مخفف JavaScript Object Notation است.
مزیت اصلی JSON نحو مینیمالیستی آن است. برای توصیف دادهها فقط از شش نوع استفاده میشود: رشته، عدد، بولی، null، آرایه و شیء. این برای نمایش هر نوع ساختار دادهای که در برنامهها استفاده میشود کافی است.
نحو JSON بسیار ساده است: دادهها به صورت جفتهای کلید-مقدار نمایش داده میشوند، جایی که کلید یک رشته در داخل گیومه دوگانه است و مقدار یکی از شش نوع پایه است. اشیاء در آکولاد، آرایهها در براکت قرار میگیرند. رشتهها حتماً از گیومه دوگانه استفاده میکنند، گیومه تکی مجاز نیست.
اعداد در JSON میتوانند صحیح یا اعشاری، مثبت یا منفی، با نماد نمایی باشند. مقادیر بولی با true و false نمایش داده میشوند و عدم وجود مقدار با null نشان داده میشود. آرایهها مجموعه مرتبی از مقادیر از هر نوع را شامل میشوند، از جمله آرایههای تو در تو و اشیاء.
{
"name": "JSON",
"type": "text",
"version": 2024,
"flexible": true,
"extensions": null,
"languages": [
"JavaScript",
"Python",
"Java"
],
"nested": {
"info": "پشتیبانی از تو در تویی"
}
}
| نوع | مثال | توضیح |
|---|---|---|
| رشته | «متن» |
در گیومه دوگانه، با دنبالههای escape |
| عدد | ۴۲ |
صحیح، اعشاری، نمایی |
| بولی | true |
true یا false — بدون گیومه |
| null | null |
عدم وجود مقدار |
| شیء | {} |
مجموعه نامرتب جفتهای کلید-مقدار |
| آرایه | [] |
لیست مرتبی از مقادیر |
JSON فرمت اصلی تبادل داده برای REST API در توسعه موبایل و وب است. سرور JSON را در بدنه پاسخ ارسال میکند، کلاینت — در بدنه درخواست. هدر استاندارد Content-Type برای JSON application/json است.
REST APIهای مدرن از JSON برای انتقال همه انواع داده استفاده میکنند: از لیستهای ساده گرفته تا ساختارهای تو در تو با روابط بین موجودیتها. کتابخانه کلاینت (مثلاً Axios در JavaScript یا Retrofit در Android) به طور خودکار JSON را سریال و دسریال میکند و برنامهنویس را از تجزیه دستی بینیاز میکند.
مزیت مهم JSON در REST API امکان انتقال جزئی داده (partial response) از طریق پارامترهای درخواست و همچنین پشتیبانی از منابع تو در تو بدون درخواست اضافی به سرور است.
تجزیه JSON در پلتفرمهای موبایل با ابزارهای داخلی انجام میشود. Android از کتابخانههای Gson (Google) یا Moshi (Square) استفاده میکند، iOS از پروتکل Codable با JSONDecoder. هر پلتفرم ابزارهای مناسبی برای تبدیل JSON به اشیاء بومی و بالعکس فراهم میکند.
در Android رویکرد استفاده از Gson یا Moshi محبوب است. کافی است data class با annotations @SerializedName تعریف کرده و fromJson را برای دسریالسازی فراخوانی کنید. کتابخانه به طور خودکار نام فیلدها در JSON را با فیلدهای کلاس مطابقت میدهد.
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName
data class User(
@SerializedName("id") val id: Int,
@SerializedName("name") val name: String,
@SerializedName("email") val email: String
)
fun parseJson(jsonString: String): User {
val gson = Gson()
return gson.fromJson(jsonString, User::class.java)
}
در iOS از پروتکل داخلی Codable با JSONDecoder استفاده میشود. ساختار داده به عنوان struct با پروتکل Codable اعلام میشود و سپس JSON با یک خط تجزیه میشود. JSONEncoder سریالسازی معکوس را انجام میدهد — شیء را برای ارسال به سرور به JSON تبدیل میکند.
import Foundation
struct User: Codable {
let id: Int
let name: String
let email: String
}
func parseJSON(from data: Data) throws -> User {
let decoder = JSONDecoder()
return try decoder.decode(User.self, from: data)
}
JSON و XML — دو فرمت اصلی برای انتقال دادههای ساختاریافته هستند. JSON در سادگی و عملکرد برتر است، XML در دقت و اعتبارسنجی. انتخاب بین آنها به نیازهای پروژه بستگی دارد: برای REST API بیشتر JSON انتخاب میشود، برای اسناد پیچیده با طرحوارهها — XML.
XML برای هر عنصر به تگ بسته نیاز دارد که اندازه داده را ۲-۳ برابر نسبت به JSON افزایش میدهد. در عین حال XML از فضاهای نام، طرحوارههای XSD، ویژگیها و تبدیل XSLT پشتیبانی میکند که آن را برای کارهای گردش اسناد و یکپارچهسازی سیستمهای سازمانی قدرتمندتر میکند.
| ویژگی | JSON | XML |
|---|---|---|
| نحو | مینیمال، کلید-مقدار | تگی، تگهای باز و بسته |
| اندازه داده | فشرده | ۲-۳ برابر بزرگتر از JSON |
| انواع داده | شش نوع پایه | فقط متن، انواع از طریق طرحواره |
| اعتبارسنجی | ندارد، از طریق JSON Schema | XSD — دقیق و بالغ |
| فضاهای نام | ندارد | پشتیبانی کامل namespace |
| سرعت تجزیه | بالا | پایینتر به دلیل پیچیدگی |
مثالها عملیات معمول با JSON در توسعه موبایل را نشان میدهند: تجزیه پاسخهای API، ایجاد JSON برای ارسال و پردازش ساختارهای تو در تو. درک این الگوها برای هر توسعهدهنده برنامههای موبایل ضروری است.
در JavaScript JSON.stringify شیء را به رشته JSON تبدیل میکند. آرگومان دوم میتواند آرایهای از کلیدها برای سریالسازی انتخابی یا تابع جایگزین باشد. آرگومان سوم فاصله برای قالببندی را تعیین میکند.
interface Order {
id: string;
items: OrderItem[];
total: number;
createdAt: string;
}
const order: Order = {
id: 'ord_001',
items: [{ product: 'phone', quantity: 2 }],
total: 1599.98,
createdAt: '2026-07-03T10:00:00Z'
};
const jsonString = JSON.stringify(order, null, 2);
در Kotlin با کتابخانه Moshi اشیاء JSON تو در تو از طریق data classهای تو در تو پردازش میشوند. annotation @Json نام فیلد در JSON را مشخص میکند اگر با نام ویژگی کلاس متفاوت باشد. آرایهها به صورت List با نوع عنصر نمایش داده میشوند.
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
data class ApiResponse(
val status: String,
val data: List<Product>,
val pagination: Pagination
)
data class Product(
val id: Int,
val title: String,
val price: Double
)
data class Pagination(
val page: Int,
val total: Int
)
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
JSON Schema — زبانی برای توصیف ساختار سند JSON، مشابه XSD برای XML است. با JSON Schema میتوان فیلدهای اجباری، انواع داده، محدوده مقادیر، الگوهای رشته و ساختار تو در تو را تعیین کرد. اعتبارسنجی بر اساس طرحواره خطاهای داده را قبل از پردازش در برنامه تشخیص میدهد.
JSON Schema به طور گسترده در OpenAPI (Swagger) برای مستندسازی REST API، در فرمهای اعتبارسنجی ورودی داده و در تست استفاده میشود. فایل طرحواره خود یک سند JSON است که امکان استفاده از تجزیهگرهای استاندارد JSON را برای خواندن آن فراهم میکند. اعتبارسنجهای آنلاین و کتابخانههای همه زبانهای برنامهنویسی محبوب وجود دارند.
در توسعه موبایل، JSON Schema برای اعتبارسنجی پاسخهای سرور در مرحله تست و بررسی فایلهای پیکربندی استفاده میشود. کتابخانههایی مانند network-validator در Android و json-schema-validator اجازه میدهند اعتبارسنجی مستقیماً در فرآیند توسعه تعبیه شود و از بروز خطا در مراحل اولیه جلوگیری کند.
سوالات متداول
JSON از شش نوع پشتیبانی میکند: رشته (در گیومه دوگانه)، عدد (صحیح و اعشاری)، بولی (true/false)، null، شیء (جفتهای کلید-مقدار در {}) و آرایه (لیست مقادیر در []). این برای هر نوع ساختار داده در برنامهها کافی است.
خیر، استاندارد JSON از کامنت پشتیبانی نمیکند. اگر به کامنت نیاز دارید، از JSON5 (JSON توسعه یافته) استفاده کنید یا فیلدی با توضیح اضافه کنید، مثلاً «_comment»: «توضیح». برخی ابزارها مانند VS Code از کامنت در فایلهای JSON پیکربندی پشتیبانی میکنند، اما این یک توسعه غیراستاندارد است.
JSONB — یک فرمت باینری ذخیرهسازی JSON در PostgreSQL است. بر خلاف JSON متنی، JSONB سریعتر پردازش میشود، ایندکسگذاری (ایندکسهای GIN) را پشتیبانی میکند و یکتایی کلیدها را تضمین میکند. در عین حال JSONB به دلیل افزودن متادیتا فضای بیشتری روی دیسک اشغال میکند.
برای بررسی سریع از JSONLint (jsonlint.com)، JSON.parse() داخلی در JavaScript با try-catch یا پلاگینهای IDE استفاده کنید. اعتبارسنجی شامل بررسی صحت گیومهها، بسته شدن براکتها و مطابقت انواع است. برای طرحوارههای پیچیده از JSON Schema Validator استفاده کنید.
در مشخصات JSON محدودیتی وجود ندارد. در عمل اندازه با حافظه دستگاه و قابلیتهای تجزیهگر محدود میشود. برای برنامههای موبایل توصیه میشود از ۱-۲ مگابایت در هر پاسخ تجاوز نکنید و برای دادههای بزرگ از صفحهبندی یا انتقال جریانی استفاده کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید