JSON поддерживает следующие структуры данных (эквиваленты Java): Scalar, Array / List и Map.
A Set
не поддерживается "из коробки" в JSON.
Я подумал о нескольких способах представления набора в JSON:
[1] - в виде списка
Тем не менее, список имеет свой собственный порядок, поэтому следующие два списка ["a", "b"]
и ["b", "a"]
не равны как списки, но они должны быть равны как наборы.
[2] - как карта
Используйте набор ключей карты и игнорируйте значения.
Но опять же, используя стандартное сравнение, они не совпадают с картами:
{"a": "foo", "b": "bar"}
, {"a": null, "b": null}
[3] - как карта с особым значением
Возьмите скаляр, скажем 0
или null
и заставьте его быть значением каждого ключа на карте:
{"a": 0, "b": 0}
Таким образом, в стандартных инструментах сравнения объекты равны, даже если порядок клавиш изменен.
Однако этот метод загрязняет документ JSON несущественными данными.
[4] - как упорядоченный список
Вернемся к первому предложению, но на этот раз как упорядоченный список. Этот вид решает проблему сравнения.
Однако мы должны также учитывать сложность сортировки, а также то, что нотация карты обрабатывает дубликаты, а сортированный список - нет. Пример:
{"a": 400, "a": 9}
обрабатывается как {"a": 9}
, но ["g", "g"]
всегда будет ["g", "g"]
.
Сказав все это, мне кажется, что нотация списка более ясна, но нотация карты более устойчива к дублированию ключей и усложняет согласованность с особым значением (хотя это null
кажется хорошим выбором для этого).
Что вы думаете? Как бы вы представили набор в JSON?
PS
Обратите внимание, что вопрос это просто о JSON. Я знаю, что доступны другие форматы, такие как yaml. По-прежнему...