JSON (JavaScript Object Notation) — JavaScript obyektlərinin sintaksisinə əsaslanan yüngül mətn məlumat mübadiləsi formatıdır. O hər yerdə istifadə olunur: REST API və konfiqurasiya fayllarından tutmuş verilənlər bazalarında və mobil tətbiqlərdə məlumatların saxlanmasına qədər. Rəsmi JSON saytının məlumatına görə, format proqramlaşdırma dilindən asılı deyil və demək olar ki, bütün müasir platformalar tərəfindən dəstəklənir. JSON müştəri və server arasında məlumat ötürülməsi üçün de-fakto standarta çevrilib.
Əsas məqamlar
JSON — JavaScript sintaksisinə əsaslanan strukturlaşdırılmış məlumatların təqdimatı üçün mətn formatıdır. JavaScript mənşəli olmasına baxmayaraq, format dildən tamamilə müstəqildir — parserlər və serializatorlar bütün məşhur proqramlaşdırma dilləri üçün mövcuddur.
JSON tarixi 2000-ci illərin əvvəllərində, Duqlas Krokfordun məlumat mübadiləsi üçün JavaScript sintaksisinin alt çoxluğunu ayırması ilə başlamışdır. 2013-cü ildə format ECMA-404, daha sonra isə ISO/IEC 21778:2017 kimi standartlaşdırılmışdır. Adı JavaScript Object Notation mənasını verir.
JSON-un əsas üstünlüyü minimalist sintaksisdir. Məlumatları təsvir etmək üçün cəmi altı tip istifadə olunur: string, ədəd, boolean, null, massiv və obyekt. Bu, tətbiqlərdə istifadə olunan istənilən məlumat strukturlarını təqdim etmək üçün kifayətdir.
JSON sintaksisi olduqca sadədir: məlumatlar açar-dəyər cütləri kimi təqdim olunur, burada açar qoşa dırnaq içərisində string, dəyər isə altı əsas tipdən biridir. Obyektlər qıvrım mötərizələrə, massivlər isə kvadrat mötərizələrə alınır. Stringlər mütləq qoşa dırnaq istifadə edir, tək dırnaqlar icazə verilmir.
JSON-da ədədlər tam və ya kəsr, müsbət və ya mənfi, eksponensial qeyd ilə ola bilər. Boolean dəyərlər true və false literalları, dəyərin olmaması isə null ilə təmsil olunur. Massivlər istənilən tipdəki dəyərlərin, o cümlədən iç-içə massivlər və obyektlərin sıralanmış toplusunu ehtiva edir.
{
"name": "JSON",
"type": "text",
"version": 2024,
"flexible": true,
"extensions": null,
"languages": [
"JavaScript",
"Python",
"Java"
],
"nested": {
"info": "iç-içə yerləşmə dəstəyi"
}
}
| Tip | Nümunə | Təsvir |
|---|---|---|
| String | “mətn” |
Qoşa dırnaqda, escape ardıcıllıqları ilə |
| Ədəd | 42 |
Tam, kəsr, eksponensial |
| Boolean | true |
true və ya false — dırnaqsız |
| null | null |
Dəyərin olmaması |
| Obyekt | {} |
Sıralanmamış açar-dəyər cütləri toplusu |
| Massiv | [] |
Sıralanmış dəyərlər siyahısı |
JSON mobil və veb inkişafında REST API üçün əsas məlumat mübadiləsi formatıdır. Server cavabın gövdəsində JSON göndərir, müştəri isə sorğunun gövdəsində. JSON üçün standart Content-Type başlığı application/json-dir.
Müasir REST API-lər bütün məlumat növlərini ötürmək üçün JSON-dan istifadə edir: sadə siyahılardan tutmuş obyektlər arasında əlaqələri olan mürəkkəb iç-içə strukturlara qədər. Müştəri kitabxanası (məsələn, JavaScript-də Axios və ya Android-də Retrofit) avtomatik olaraq JSON-u serializasiya və deserializasiya edir, tərtibatçını əl ilə parsinqdən xilas edir.
REST API-də JSON-un mühüm üstünlüyü sorğu parametrləri vasitəsilə qismən məlumat ötürmə (partial response) imkanı, həmçinin serverə əlavə sorğular olmadan iç-içə resursların dəstəklənməsidir.
JSON parsinqi mobil platformalarda daxili alətlərlə həyata keçirilir. Android Google-dan Gson və ya Square-dən Moshi kitabxanalarından, iOS isə JSONDecoder ilə Codable protokolundan istifadə edir. Hər platforma JSON-u native obyektlərə və əksinə çevirmək üçün rahat alətlər təqdim edir.
Android-də Gson və ya Moshi istifadə edilən yanaşma populyardır. @SerializedName annotasiyaları ilə data class müəyyən etmək və deserializasiya üçün fromJson çağırmaq kifayətdir. Kitabxana avtomatik olaraq JSON-da sahə adlarını sinif sahələri ilə uyğunlaşdırır.
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-da JSONDecoder ilə daxili Codable protokolu istifadə olunur. Məlumat strukturu Codable protokolu ilə struct kimi elan edilir, sonra JSON bir sətirlə pars edilir. JSONEncoder tərs serializasiyanı yerinə yetirir — obyekti serverə göndərmək üçün JSON-a çevirir.
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 və XML — strukturlaşdırılmış məlumatların ötürülməsi üçün iki əsas format. JSON sadəlik və performansda, XML isə ciddilik və validasiyada üstündür. Onların arasında seçim layihənin tələblərindən asılıdır: REST API üçün daha çox JSON, sxemləri olan mürəkkəb sənədlər üçün XML seçilir.
XML hər bir element üçün bağlanan teqlər tələb edir, bu da məlumatların ölçüsünü JSON ilə müqayisədə 2-3 dəfə artırır. Eyni zamanda XML ad fəzalarını, XSD sxemlərini, atributları və XSLT transformasiyasını dəstəkləyir, bu da onu sənəd dövriyyəsi və korporativ sistemlərin inteqrasiyası tapşırıqları üçün daha güclü edir.
| Xüsusiyyət | JSON | XML |
|---|---|---|
| Sintaksis | Minimalist, açar-dəyər | Teqlə, açılan və bağlanan teqlər |
| Məlumat ölçüsü | Kompakt | JSON-dan 2-3 dəfə böyük |
| Məlumat tipləri | Altı əsas tip | Yalnız mətn, tiplər sxemlər vasitəsilə |
| Validasiya | Daxili yox, JSON Schema vasitəsilə | XSD — ciddi və yetkin |
| Ad fəzaları | Yoxdur | Namespace-in tam dəstəyi |
| Parsinq sürəti | Yüksək | Mürəkkəbliyə görə aşağı |
Nümunələr mobil inkişafda JSON ilə tipik əməliyyatları nümayiş etdirir: API cavablarının parsinqi, göndərmək üçün JSON yaradılması və iç-içə strukturların işlənməsi. Bu nümunələri başa düşmək hər bir mobil tətbiq tərtibatçısı üçün zəruridir.
JavaScript-də JSON.stringify obyekti JSON sətrinə çevirir. İkinci arqumentlə seçmə serializasiya üçün açarlar massivi və ya əvəzedici funksiya ötürmək olar. Üçüncü arqument formatlaşdırma üçün boşluqları təyin edir.
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-də Moshi kitabxanası ilə iç-içə JSON obyektləri iç-içə data classlar vasitəsilə işlənir. @Json annotasiyası JSON-da sahə adını göstərir, əgər sinif xüsusiyyətinin adından fərqlidirsə. Massivlər element tipi ilə List kimi təqdim olunur.
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 — XML üçün XSD-yə bənzər JSON sənədinin strukturunu təsvir etmək dilidir. JSON Schema vasitəsilə məcburi sahələri, məlumat tiplərini, dəyər diapazonlarını, sətir nümunələrini və iç-içə strukturu təyin etmək olar. Sxem üzrə validasiya məlumatların tətbiqdə işlənməsindən əvvəl səhvləri aşkarlayır.
JSON Schema REST API-nin sənədləşdirilməsi üçün OpenAPI (Swagger)-də, giriş məlumatlarının validasiya formalarında və testdə geniş istifadə olunur. Sxem faylı özü JSON sənədidir, bu da onu oxumaq üçün standart JSON parserlərdən istifadə etməyə imkan verir. Bütün məşhur proqramlaşdırma dilləri üçün onlayn validatorlar və kitabxanalar mövcuddur.
Mobil inkişafda JSON Schema test mərhələsində server cavablarının validasiyası və konfiqurasiya fayllarının yoxlanılması üçün istifadə olunur. Android-də network-validator, json-schema-validator kimi kitabxanalar validasiyanı birbaşa inkişaf prosesinə yerləşdirməyə, erkən mərhələlərdə səhvlərin qarşısını almağa imkan verir.
Tez-tez verilən suallar
JSON altı tipi dəstəkləyir: string (qoşa dırnaqda), ədəd (tam və kəsr), boolean (true/false), null, obyekt ({} içərisində açar-dəyər cütləri) və massiv ([] içərisində dəyərlər siyahısı). Bu, tətbiqlərdə istənilən məlumat strukturları üçün kifayətdir.
Xeyr, JSON standartı şərhləri dəstəkləmir. Əgər şərhlər lazımdırsa, JSON5 (genişləndirilmiş JSON) istifadə edin və ya təsvir olan sahə əlavə edin, məsələn “_comment”: “izah”. VS Code kimi bəzi alətlər konfiqurasiya JSON fayllarında şərhləri dəstəkləyir, lakin bu qeyri-standart genişlənmədir.
JSONB — PostgreSQL-də JSON-un saxlanması üçün ikilik formatdır. Mətn JSON-dan fərqli olaraq, JSONB daha sürətli işlənir, indeksləşdirməni (GIN indeksləri) dəstəkləyir və açarların unikallığını təmin edir. Eyni zamanda JSONB metadata əlavə edildiyinə görə diskdə daha çox yer tutur.
Sürətli yoxlama üçün JSONLint (jsonlint.com), JavaScript-də try-catch ilə daxili JSON.parse() və ya IDE plaginlərindən istifadə edin. Validasiya dırnaqların düzgünlüyünü, mötərizələrin bağlanmasını və tiplərin uyğunluğunu yoxlamağı əhatə edir. Mürəkkəb sxemlər üçün JSON Schema Validator istifadə edin.
JSON spesifikasiyasında məhdudiyyət yoxdur. Praktikada ölçü cihazın yaddaşı və parserin imkanları ilə məhdudlaşır. Mobil tətbiqlər üçün bir cavabda 1-2 MB-dan çox olmamaq, böyük məlumatlar üçün isə səhifələmə və ya axın ötürülməsindən istifadə etmək tövsiyə olunur.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun