Должен ли JSON включать значения null
Я создаю API, который возвращает результаты как JSON. Существует ли текущая наилучшая практика для того, следует ли включать ключи в результат, когда значение равно null? Например:
{
"title":"Foo Bar",
"author":"Joe Blow",
"isbn":null
}
или
{
"title":"Foo Bar",
"author":"Joe Blow"
}
поскольку второй меньше, я склоняюсь к этому стилю, но я не уверен, есть ли предпочтительный стиль или нет. С точки зрения клиента кажется, что оба стиля будут функционально эквивалентны. За или против каждого?
5 ответов
второй сэкономит небольшую сумму на пропускной способности, но если бы это было проблемой, вы также использовали бы индексированные массивы вместо заполнения JSON ключами. Ясно,["Foo Bar","Joe Blow"]
гораздо короче, чем у вас сейчас.
С точки зрения удобства использования, я не думаю, что это имеет значение. В обоих случаях if(json.isbn)
переход на else
. Обычно нет необходимости различать null
(не значение) и undefined
(значение не указано).
Я поклонник всегда включать null явно, поскольку это несет смысл. При опущении свойства остается двусмысленность.
пока ваш протокол с сервером согласован, любой из вышеперечисленных может работать, но если вы передаете нули с сервера, я считаю, что это делает ваши API более гибкими позже.
следует также упомянуть, что функция hasOwnProperty javascript дает вам дальнейшее представление.
/* if true object DOES contain the property with *some* value */
if( objectFromJSON.hasOwnProperty( "propertyName" ) )
/* if true object DOES contain the property and it has been set to null */
if( jsonObject.propertyName === null )
/* if true object either DOES NOT contain the property
OR
object DOES contain the property and it has been set to undefined */
if( jsonObject.propertyName === undefined )
В JavaScript null
означает что-то совсем другое, чем undefined
.
ваш вывод JSON должен отражать то, что используется и требуется вашим приложением в конкретном контексте использования данных JSON.
вы обязательно должны включить его, если есть необходимость различать null
и undefined
поскольку они имеют два разных значения в Javascript. Вы можете думать о null
Как значение свойства неизвестно или бессмысленно, и undefined
Как означает, что свойство не существует.
С другой стороны, если нет необходимости кому-либо делать это различие, тогда продолжайте и оставьте его.
Я думаю, что нет никакой разницы, когда вы используете JSON в качестве данных за опытом пользователя.
разница появляется в файлах JSON-config, когда пользователь должен что-то редактировать вручную. Когда вы используете первый пример, вы даете пользователю некоторую подсказку о конфигурации.