Что такое соглашение в JSON для пустого или нулевого?
Я знаю, что в большинстве сценариев программирования предпочтение отдается пустым коллекциям для нулевых коллекций, когда есть 0 элементов. Однако большинство языков, которые потребляют JSON (например, JavaScript), будут обрабатывать пустые списки/объекты как истинные, а null - как ложные. Например, это будет как true, так и объект в JavaScript:
{
"items_in_stock": {"widgets":10, "gadgets": 5}
}
Но это также верно:
{
"items_in_stock": {}
}
И это неверно:
{
"items_in_stock": null
}
Есть ли соглашение о пустых объектах/списках для JSON? А как насчет чисел, булей и строк?
Ответы
Ответ 1
Хорошая практика программирования возвращает пустой массив, если ожидаемый тип возвращаемого значения является массивом. Это гарантирует, что получатель json может немедленно обработать значение как массив и не должен сначала проверять, является ли оно нулевым. Точно так же с пустыми объектами ({}). Строки, булевы и целые числа не имеют "пустой" формы, поэтому можно использовать нулевые значения.
Не верьте мне на слово. В Joshua Blochs отличная книга "Эффективная Java" он описывает некоторые очень хорошие общие практики программирования (часто применимые и к другим языкам программирования). Возвращение пустых коллекций вместо нулей является одним из них. Здесь ссылка на ту часть его книги: http://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html
Ответ 2
"JSON имеет специальное значение, называемое нулем, которое может быть установлено для любого типа данных, включая массивы, объекты, число и логические типы.
"Пустая концепция JSON применяется для массивов и объектов... Объект данных не имеет понятия пустых списков, поэтому никаких действий над объектом данных для этих свойств не предпринимается".
Здесь является моим источником.