Tüm makaleler

JSON Sort Keys: bir nesnenin anahtarları neden sıralanır

JSON spesifikasyonu, bir nesnedeki anahtarların sırasını resmi olarak tanımlamaz — {"a": 1, "b": 2} ve {"b": 2, "a": 1} aynı verileri temsil eder. Ancak pratikte, anahtar sırası hem insanlar hem de bu verilerle çalışan araçlar için yine de sıkça önemlidir.

Anahtarlar neden sıralanır

  • Karşılaştırma (diff). Aynı verilere sahip iki JSON belgesinin farklı anahtar sırası varsa, bir metin diff'i sahte bir fark gösterir. Sıralama bu sorunu ortadan kaldırır.
  • Deterministik çıktı. Aynı nesne birden çok kez serileştirilirse (örneğin bir hash veya önbellek anahtarı oluşturmak için), sıralanmış anahtarlar her seferinde aynı sonucu garanti eder.
  • Okunabilirlik. Alfabetik olarak sıralanmış bir nesneyi hızlıca gözden geçirmek ve içinde belirli bir alanı bulmak, özellikle büyük yapılarda daha kolaydır.

Özyinelemeli sıralama

Sonucun öngörülebilir olması için sıralama genellikle özyinelemeli olarak uygulanır — yalnızca en üst düzey anahtarlara değil, herhangi bir derinlikteki tüm iç içe geçmiş nesnelerin anahtarlarına da. Dizilerdeki öğelerin sırası bu sırada değişmez, çünkü diziler için öğe sırası verinin anlamlı bir parçasıdır.

Ne zaman gerekli değil

JSON yalnızca bir program tarafından tüketiliyorsa (bir insan veya diff aracı tarafından değil), anahtarları sıralamak genellikle pratik bir avantaj sağlamaz — ayrıştırıcılar bir nesneyi alan sırasından bağımsız olarak aynı şekilde okur.

Türk alfabesinde ç, ğ, ı, ö, ş, ü nereye oturur

Türk alfabesinin kendine özgü, sabit bir harf sırası vardır: A B C Ç D E F G Ğ H I İ J K L M N O Ö P R S Ş T U Ü V Y Z. Yani ç alfabetik olarak c'den hemen sonra, ş ise s'den hemen sonra gelir — ayrıca noktasız ı ile noktalı İ, "h"den sonra art arda yer alan iki ayrı harf olarak tanımlanır. Basit bir Unicode kod noktası sıralaması ise bu harfleri alfabedeki gerçek konumlarına değil, kod noktası değerlerine göre sona doğru bir yere koyar — "çilek" gibi bir anahtar, doğru Türkçe sıralamada "c" ile başlayan kelimelerin hemen yanında olması gerekirken, ham sıralamada z'den bile sonraya düşebilir.

Sıralama ve yerel ayar

Yalnızca Latin alfabesiyle sınırlı olmayan anahtarların alfabetik sıralaması, karakterlerin bayt bayt (Unicode kod noktası) mı, yoksa dil kurallarına göre mi (locale-aware collation) karşılaştırıldığına bağlıdır. Örneğin, bayta göre karşılaştırma büyük harfleri, alfabeden bağımsız olarak küçük harflerden önce yerleştirirken, yerel ayara duyarlı sıralama anahtarları farklı sıralayabilir.

Aracı dene