JSON (JavaScript Object Notation), JavaScript nesne sözdizimine dayanan metin tabanlı bir veri değişim formatıdır. REST API'ler ve yapılandırma dosyalarından veritabanları ve mobil uygulamalardaki veri depolamaya kadar her yerde kullanılır. Resmi JSON web sitesine göre, format dilden bağımsızdır ve neredeyse tüm modern platformlar tarafından desteklenir. JSON, istemci ve sunucu arasında veri aktarımı için fiili standart haline gelmiştir.
Önemli Noktalar
JSON, JavaScript sözdizimine dayalı, yapılandırılmış verileri temsil etmek için bir metin formatıdır. JavaScript'teki kökenlerine rağmen, format tamamen dilden bağımsızdır — tüm popüler programlama dilleri için ayrıştırıcılar ve serileştiriciler mevcuttur.
JSON'ın tarihi 2000'lerin başında, Douglas Crockford'un veri değişimi için JavaScript sözdiziminin bir alt kümesini çıkarmasıyla başladı. 2013 yılında format ECMA-404 olarak ve daha sonra ISO/IEC 21778:2017 olarak standartlaştırıldı. İsim, JavaScript Object Notation'ın kısaltmasıdır.
JSON'ın ana avantajı minimalist sözdizimidir. Verileri tanımlamak için yalnızca altı tür kullanılır: dize, sayı, boolean, null, dizi ve nesne. Bu, uygulamalarda kullanılan herhangi bir veri yapısını temsil etmek için yeterlidir.
JSON sözdizimi son derece basittir: veriler anahtar-değer çiftleri olarak temsil edilir, burada anahtar çift tırnak içinde bir dize ve değer altı temel türden biridir. Nesneler küme parantezleri içine alınır, diziler köşeli parantezler içine alınır. Dizeler çift tırnak kullanmalıdır; tek tırnaklara izin verilmez.
JSON'daki sayılar tam sayı veya kayan noktalı, pozitif veya negatif, üstel gösterimle olabilir. Boolean değerleri true ve false değişmezleriyle temsil edilir ve değerin yokluğu null ile temsil edilir. Diziler, iç içe diziler ve nesneler dahil olmak üzere herhangi bir türden değerlerin sıralı bir kümesini içerir.
{
"name": "JSON",
"type": "text",
"version": 2024,
"flexible": true,
"extensions": null,
"languages": [
"JavaScript",
"Python",
"Java"
],
"nested": {
"info": "iç içe yerleştirme desteği"
}
}
| Tür | Örnek | Açıklama |
|---|---|---|
| Dize | “metin” |
Çift tırnak içinde, kaçış dizileriyle |
| Sayı | 42 |
Tam sayı, kayan noktalı, üstel |
| Boolean | true |
true veya false — tırnak işareti yok |
| null | null |
Değerin yokluğu |
| Nesne | {} |
Sırasız anahtar-değer çiftleri kümesi |
| Dizi | [] |
Sıralı değerler listesi |
JSON, mobil ve web geliştirmede REST API'ler için birincil veri değişim formatıdır. Sunucu yanıt gövdesinde JSON gönderir, istemci istek gövdesinde gönderir. JSON için standart Content-Type başlığı application/json'dır.
Modern REST API'ler, basit listelerden varlıklar arasında ilişkiler bulunan karmaşık iç içe yapılara kadar her türlü veriyi iletmek için JSON kullanır. İstemci kitaplıkları (JavaScript'te Axios veya Android'de Retrofit gibi) JSON'u otomatik olarak serileştirir ve seri durumdan çıkarır, geliştiriciyi manuel ayrıştırmadan kurtarır.
REST API'lerde JSON'ın önemli bir avantajı, sorgu parametreleri aracılığıyla kısmi veri aktarımı (kısmi yanıt) yeteneği ve sunucuya ek istekler olmadan iç içe kaynakların desteklenmesidir.
JSON ayrıştırma, mobil platformlarda yerleşik araçlar kullanılarak gerçekleştirilir. Android, Google'ın Gson'ını veya Square'in Moshi'sini kullanır, iOS, JSONDecoder ile Codable protokolünü kullanır. Her platform, JSON'u yerel nesnelere ve geriye dönüştürmek için kullanışlı araçlar sağlar.
Android'de popüler yaklaşım Gson veya Moshi kullanır. @SerializedName ek açıklamalarıyla bir veri sınıfı tanımlayın ve seri durumdan çıkarma için fromJson'u çağırın. Kitaplık, JSON alan adlarını otomatik olarak sınıf özellikleriyle eşler.
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'te, JSONDecoder ile yerleşik Codable protokolü kullanılır. Veri yapısı, Codable'a uygun bir struct olarak bildirilir, ardından JSON tek bir satırla ayrıştırılır. JSONEncoder, ters serileştirme gerçekleştirir — bir nesneyi sunucuya göndermek için JSON'a dönüştürür.
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 ve XML, yapılandırılmış verileri iletmek için iki ana formattır. JSON basitlik ve performansta kazanır, XML titizlik ve doğrulamada kazanır. Aralarındaki seçim proje gereksinimlerine bağlıdır: REST API'ler daha sık JSON kullanır, şemalı karmaşık belgeler XML kullanır.
XML, her öğe için kapanış etiketleri gerektirir ve bu da veri boyutunu JSON'a kıyasla 2-3 kat artırır. Aynı zamanda XML, ad alanlarını, XSD şemalarını, nitelikleri ve XSLT dönüşümünü destekleyerek belge yönetimi ve kurumsal sistem entegrasyonu görevleri için daha güçlü hale getirir.
| Özellik | JSON | XML |
|---|---|---|
| Sözdizimi | Minimalist, anahtar-değer | Etiket tabanlı, açma ve kapama etiketleri |
| Veri boyutu | Kompakt | JSON'dan 2-3 kat büyük |
| Veri türleri | Altı temel tür | Yalnızca metin, şemalar aracılığıyla türler |
| Doğrulama | Yerleşik yok, JSON Schema aracılığıyla | XSD — katı ve olgun |
| Ad alanları | Yok | Tam ad alanı desteği |
| Ayrıştırma hızı | Yüksek | Karmaşıklık nedeniyle daha düşük |
Örnekler, mobil geliştirmede JSON ile tipik işlemleri gösterir: API yanıtlarını ayrıştırma, gönderme için JSON oluşturma ve iç içe yapıları işleme. Bu kalıpları anlamak, herhangi bir mobil uygulama geliştiricisi için gereklidir.
JavaScript'te, JSON.stringify bir nesneyi JSON dizesine dönüştürür. İkinci bağımsız değişken, seçmeli serileştirme için bir anahtar dizisi veya bir değiştirme işlevi olabilir. Üçüncü bağımsız değişken, biçimlendirme için girintiyi ayarlar.
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);
Moshi kitaplığıyla Kotlin'de, iç içe JSON nesneleri, iç içe veri sınıfları aracılığıyla işlenir. @Json ek açıklaması, sınıf özellik adından farklıysa JSON alan adını belirtir. Diziler, öğe türüyle birlikte List olarak temsil edilir.
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 için XSD'ye benzer şekilde bir JSON belgesinin yapısını tanımlamak için bir dildir. JSON Schema kullanarak zorunlu alanları, veri türlerini, değer aralıklarını, dize kalıplarını ve iç içe yapıyı belirtebilirsiniz. Şema doğrulaması, uygulamada işlenmeden önce veri hatalarını tespit eder.
JSON Schema, REST API'leri belgelemek için OpenAPI'de (Swagger), giriş verisi doğrulama formlarında ve testlerde yaygın olarak kullanılır. Şema dosyasının kendisi bir JSON belgesidir ve standart JSON ayrıştırıcılarının onu okumasına olanak tanır. Tüm popüler programlama dilleri için çevrimiçi doğrulayıcılar ve kitaplıklar mevcuttur.
Mobil geliştirmede JSON Schema, test sırasında sunucu yanıtlarını doğrulamak ve yapılandırma dosyalarını kontrol etmek için kullanılır. Android'de network-validator ve json-schema-validator gibi kitaplıklar, doğrulamayı doğrudan geliştirme sürecine yerleştirmeye olanak tanır ve hataları erken aşamalarda önler.
Sıkça Sorulan Sorular
JSON altı türü destekler: dize (çift tırnak içinde), sayı (tam sayı ve kayan noktalı), boolean (true/false), null, nesne ({} içinde anahtar-değer çiftleri) ve dizi ([] içinde değer listesi). Bu, uygulamalardaki herhangi bir veri yapısı için yeterlidir.
Hayır, JSON standardı yorumları desteklemez. Yorumlara ihtiyacınız varsa, JSON5 (genişletilmiş JSON) kullanın veya bir açıklama alanı ekleyin, örneğin “_comment”: “açıklama”. VS Code gibi bazı araçlar, yapılandırma JSON dosyalarında yorumları destekler, ancak bu standart dışı bir uzantıdır.
JSONB, PostgreSQL'de JSON için ikili bir depolama formatıdır. Metin JSON'dan farklı olarak, JSONB işlemede daha hızlıdır, indekslemeyi (GIN indeksleri) destekler ve anahtar benzersizliğini garanti eder. Ancak JSONB, eklenen meta veriler nedeniyle diskte daha fazla yer kaplar.
Hızlı doğrulama için JSONLint (jsonlint.com), try-catch ile JavaScript'te yerleşik JSON.parse() veya IDE eklentilerini kullanın. Doğrulama, doğru tırnak işaretleri, parantez kapatma ve tür uygunluğunun kontrolünü içerir. Karmaşık şemalar için JSON Schema Validator kullanın.
JSON belirtiminde sınır yoktur. Pratikte, boyut cihaz belleği ve ayrıştırıcı yetenekleriyle sınırlıdır. Mobil uygulamalar için, yanıt başına 1-2 MB'ı aşmamanız önerilir ve büyük veriler için sayfalama veya akış kullanın.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun