JSON’dan Query String’e
JSON nesnesinden URL query string’i oluşturun — diziler tekrarlı anahtarlara açılır
JSON
Query String
JSON’dan Query String’e ne işe yarar?
Kodunuzda bir JSON yapılandırması hazırladınız — filtre parametreleri, bir analitik yükü, bir OAuth state’i — ve şimdi bunu bir URL’nin sonuna eklemeniz gerekiyor. Bu sayfa o sıkıcı son adımı sizin yerinize halleder. Sola JSON’u yapıştırın, sağda ?customer=Ava+Chen&status=active&total%5Bgte%5D=49.99&page=2&tag=premium&tag=verified alın; bir bağlantıya, fetch çağrısına ya da webhook URL’sine doğrudan yapıştırılmaya hazır. Diziler tekrarlı anahtarlara açılır (her modern sunucunun anladığı yaklaşım), değerler düzgünce yüzde-kodlanır ve baştaki ? dahildir, böylece bir URL’nin üstüne yapıştırabilirsiniz.
Dönüştürme, tarayıcının yerleşik URLSearchParams’ını kullanır — sunucu çatınızın geri dönen isteği ayrıştırırken kullandığı aynı temel araç. URLSearchParams, WHATWG URL Standardı’na göre application/x-www-form-urlencoded çıktısı üretir; JSON’unuz da RFC 8259’a uygun olarak JSON.parse ile ayrıştırılır. Sayılar ve mantıksal değerler dizgeye dönüştürülür (query string’lerin tip sistemi yoktur), null ve undefined değerleri atlanır, iç içe nesneler ise düzleştirebilmeniz için anlaşılır bir hata fırlatır.
Her şey tarayıcınızda yerel olarak çalışır — yükleme yok, sunucu turu yok, log yok. Tersine bir sorununuz varsa (elinizde bir query string var ve JSON istiyorsanız) Query String’den JSON’a’yı kullanın. Tüm URL’yi protokol, host, yol ve search bölümlerine ayırmak istiyorsanız URL’den JSON’a sayfası ya da URL Parser daha uygun. Burada işleyen yüzde-kodlama kuralları RFC 3986 §2.1’de tanımlı, daha geniş URL ayrıştırma modeli ise MDN URL API referansında bulunur.
JSON’u query string’e nasıl çevirilir
Üç adım. Her biri sayfadaki bir butona karşılık geliyor.
JSON nesnesini yapıştırın
JSON’u sol panele bırakın. Üst düzey değer bir nesne olmak zorunda — diziler ve ilkel değerler query parametrelerine temiz biçimde eşlenmez. Gerçekçi bir e-ticaret filtre yükü (string, sayı, köşeli parantezli anahtar ve dizi içeren) için Örnek’e tıklayın. Örnek:
{
"customer": "Ava Chen",
"status": "active",
"total[gte]": "49.99",
"page": 2,
"tag": ["premium", "verified"]
}Sayılar ve mantıksal değerler dizgeye dönüştürülür (query string’ler tip taşımaz). <code>null</code> ve <code>undefined</code> değerleri atlanır — yoksa URL’yi sadece kalabalıklaştırırlardı.
Query string’i okuyun
Sağdaki panel siz yazdıkça güncellenir. Yukarıdaki örnek ?customer=Ava+Chen&status=active&total%5Bgte%5D=49.99&page=2&tag=premium&tag=verified’ı üretir. Boşluklar + olur (form-encoded biçim — SSS’ye bakın), köşeli parantezler %5B/%5D’ye dönüşür ve tag dizisi iki ayrı tag= parametresine açılır.
Kopyalayın veya indirin
Query string’i panoya yollamak için Kopyala’ya, querystring.txt olarak kaydetmek için İndir’e tıklayın. Temizle giriş panelini sıfırlar.
Gerçekte ne zaman kullanırsınız
Paylaşılabilir filtre URL’leri oluşturma
Pano’nuz kullanıcının siparişleri müşteriye, duruma ve tarih aralığına göre filtrelemesine izin verir. Durum bilgisi, bileşeninizde JSON nesnesi olarak yaşar ({customer: "Marco Rivera", status: "active", date_from: "2026-04-01"}). Görünümü paylaşılabilir kılmak için bunu URL’ye eklersiniz — JSON’u buraya yapıştırın, query string’i kopyalayın, hazırsınız. E-ticaret kategori sayfaları, arama sonuçları, durumlu filtresi olan her şey için aynısı geçerli.
Webhook callback URL’lerini bağlama
Stripe, GitHub ve çoğu webhook göndereni, callback URL’sinin query string’ine meta veri koymanıza izin verir. Kullanıcıyı tarif eden bir JSON nesneniz var ({userId: "USR-1001", source: "checkout", flow: "onboarding"}) ve bunu https://api.example.com/webhook?...’a eklemeniz gerekiyor. Yapıştır, kopyala, yapıştır — her değeri elle URL-kodlayıp hangi karakterleri kaçırmanız gerektiğini düşünmekten çok daha iyi.
OAuth ve OpenID URL’leri üretme
OAuth yetkilendirme URL’leri 8–12 query parametresinden oluşur: client_id, redirect_uri, scope, state, response_type vb. Önce JSON’da kurup (temiz görmek için) burada dönüştürmek, dizgeleri birleştirip kodlamanın doğru olmasını dilemekten daha hızlı. state parametresi sıklıkla kendi kaçışına ihtiyaç duyan bir nonce ve dönüş yolu taşır.
HTTP istemcilerinde API istekleri kurma
Bir API uç noktasını cURL, Postman ya da hızlı bir fetch() ile denerken parametreleri genelde dokümandan alınmış bir JSON parçası halinde tutarsınız. Burada dönüştürün, URL’ye ekleyin, isteği gönderin. ORD-1001 numaralı siparişin ürün filtresi {"sku": "SKU-101", "include": "variants"}, tek bir yapıştırmada ?sku=SKU-101&include=variants’a dönüşür.
Sık sorulanlar
Boşluklar neden %20 yerine + olarak kodlanıyor?
Çünkü çıktı form-encoded (application/x-www-form-urlencoded) — her tarayıcının gönderdiği ve her sunucunun query string’de beklediği biçim. Teknik olarak RFC 3986, URI bileşenlerinde %20’yi tercih eder; ama boşluk için + kullanan form-encoded geleneği RFC 3986’dan eskidir ve query string’ler 90’lardan beri böyle kullanılır. Tüm modern sunucu çatıları her ikisini de çözer — Express, FastAPI, ASP.NET, Spring, Rails, Django, hepsi. Özellikle %20 lazımsa çıktıya hızlıca .replace(/\+/g, "%20") çekin.
Diziler nasıl kodlanıyor?
Tekrarlı anahtarlara açılırlar. {"tag": ["premium", "verified"]}, tag=premium&tag=verified olur. URLSearchParams’ın ürettiği gelenek bu ve karşı tarafta URLSearchParams.getAll() ile temiz şekilde geri alınır. Sunucunuz köşeli parantez gösterimini bekliyorsa (tag[]=premium&tag[]=verified — PHP ve Rails’te yaygın), JSON anahtarınızı tag yerine tag[] olarak adlandırın.
JSON’da iç içe nesnelerim olabilir mi?
Hayır — query string’ler tasarım gereği düzdür. Sayfa iç içe bir nesne gördüğünde anlaşılır bir hata döner, böylece düzleştirebilirsiniz. En yaygın çözüm köşeli parantez gösterimli anahtarlardır: {"filter": {"status": "active"}} yerine {"filter[status]": "active"} yazın. Rails, PHP ve qs.js gibi çatılar bunu sunucu tarafında iç içe nesnelere geri ayrıştırır. Ya da kavramsal olarak düzleştirin: gerçek bir muğlaklık yoksa {"status": "active"} yeterli.
null ve undefined değerlerine ne oluyor?
Atlanırlar. {"customer": "Ava Chen", "status": null}, ?customer=Ava+Chen&status= değil, ?customer=Ava+Chen üretir. Mantığı şu: URL’deki status= "boş dizge" anlamına gelir, gerçek bir değerdir ve "status yok" ile farklıdır. null’ı boş gibi göndermek bilgi kaybı ve karmaşaya yol açardı. Gerçekten status= istiyorsanız {"status": ""} gönderin.
Sayılar ve mantıksal değerler tip olarak korunur mu?
Hayır — query string’ler yalnızca dizge taşır. {"page": 2}, page=2’ye dönüşür; {"debug": true} ise debug=true’ya. Sunucu tarafındaki kodunuzun şemayı bilip onları geri tip dönüştürmesi gerekir. Bu, query string’ler (ve form verisi) için temeldir — kablo biçimi 2 sayısı ile "2" dizgesi arasındaki farkı bilmez. Tipli parametre lazımsa, isteğin gövdesinde JSON olarak gönderin.
Anahtar veya değerlerdeki Unicode ve emoji nasıl ele alınıyor?
Sorunsuz. URLSearchParams baytları UTF-8 olarak kodlar ve güvenli kümenin dışında kalan her şeyi yüzde-kaçırır. Yani {"name": "中文"}, name=%E4%B8%AD%E6%96%87’e; {"reaction": "🔥"} ise reaction=%F0%9F%94%A5’e dönüşür. Karşı tarafta URLSearchParams (ya da hangi çatının query ayrıştırıcısı olursa) bunları geri çözer. Oynanacak bir kodlama ayarı yok — UTF-8, URL Standardı’nın dayattığı şey.
Baştaki soru işareti ne için?
Çıktıyı bir URL’nin üstüne doğrudan yapıştırabilesiniz diye — https://shop.example.com/orders + ?customer=Ava+Chen&page=2 = çalışan bir URL. Zaten query string’i olan bir URL’ye ekliyorsanız ?’yi kaldırıp & kullanın. Girdi boşsa veya {} ise çıktı da boştur (yalnız başına bir ? kalmaz).
Diğer URL ve JSON Araçları
Bir query string oluşturmak tek bir işlemdir. Onunla iyi giden başka şeyler: