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. Все-таки ...