Должен ли 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, когда пользователь должен что-то редактировать вручную. Когда вы используете первый пример, вы даете пользователю некоторую подсказку о конфигурации.