JSON şu veri yapılarını (Java eşdeğerleri) destekler: Skaler, Dizi / Liste ve Harita.
JSON'da A Set
, kutudan çıkar çıkmaz desteklenmez.
JSON'da bir seti temsil etmenin birkaç yolunu düşündüm:
[1] - Liste olarak
Ancak, liste, kendi sıralamayı vardır aşağıdaki iki liste böylece, ["a", "b"]
ve ["b", "a"]
listeleri gibi eşit değildir, ancak bunlar batarken eşit olmalıdır.
[2] - Harita olarak
Haritanın anahtar kümesini kullanın ve değerleri yok sayın.
Ancak yine, standart karşılaştırmayı kullanarak, ikisi haritalarla aynı değildir:
{"a": "foo", "b": "bar"}
, {"a": null, "b": null}
[3] - Harita olarak, özel bir değere sahip
Bir skaler alın, söyleyin 0
veya null
haritadaki her anahtarın değeri olmaya zorlayın:
{"a": 0, "b": 0}
Bu şekilde, standart karşılaştırma araçları altında, anahtar sırası değişse bile nesneler eşittir.
Ancak, bu teknik JSON belgesini ilgisiz verilerle kirletir.
[4] - Sıralı bir liste olarak
İlk öneriye, ancak bu sefer sıralı bir liste olarak geri dönün. Bu tür karşılaştırma sorununu çözer.
Bununla birlikte, sıralamanın karmaşıklığını ve aynı zamanda sıralama gösterimi yinelenenleri işlerken, sıralı bir liste yapmaz. Misal:
{"a": 400, "a": 9}
olarak ele alınır {"a": 9}
, ancak ["g", "g"]
her zaman olur ["g", "g"]
.
Tüm bunları söyledikten sonra, liste gösteriminin daha net olduğu anlaşılıyor, ancak harita gösterimi tuşların çoğaltılması için daha sağlam ve özel değer hakkında tutarlı olmasını zorlaştırıyor ( null
bunun için iyi bir seçim gibi görünse de).
Ne düşünüyorsun? JSON'da bir seti nasıl temsil edersiniz?
PS
Bu sorunun sadece JSON ile ilgili olduğunu unutmayın. Yaml gibi başka formatların da mevcut olduğunu biliyorum. Hala ...