Если JSON содержит нулевые значения

Я создаю API, который возвращает результаты как JSON. Существует ли лучшая практика для того, следует ли включать ключи в результат, когда значение равно null? Например:

{
    "title":"Foo Bar",
    "author":"Joe Blow",
    "isbn":null
}

или

{
    "title":"Foo Bar",
    "author":"Joe Blow"
}

Поскольку второй меньше, я склоняюсь к этому стилю, но я не уверен, есть ли предпочтительный стиль или нет. С точки зрения клиента кажется, что оба стиля будут функционально эквивалентны. Любые плюсы или минусы для каждого?

Ответ 1

Вторая будет экономить небольшую часть полосы пропускания, но если это было проблемой, вы также использовали бы индексированные массивы вместо заполнения JSON ключами. Ясно, что ["Foo Bar","Joe Blow"] намного короче, чем у вас сейчас.

Что касается удобства использования, я не думаю, что это имеет значение. В обоих случаях if(json.isbn) перейдет к else. Обычно нет необходимости различать null (нет значения) и undefined (без заданного значения).

Ответ 2

Я поклонник всегда, включая null, явно, поскольку это несет в себе смысл. Хотя опускание свойства оставляет двусмысленность.

Пока ваш протокол с сервером согласован, любое из вышеперечисленных действий может работать, но если вы передадите null с сервера, я считаю, что ваши API более гибкие позже.

Следует также упомянуть, что функция javascript hasOwnProperty дает вам дополнительную информацию.

/* 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 )

Ответ 3

В JavaScript null означает нечто очень отличное от undefined.

Ваш вывод JSON должен отражать то, что используется и нужно вашему приложению в конкретном контексте использования данных JSON.

Ответ 4

Вы должны обязательно включить его, если есть необходимость различать null и undefined, поскольку у них есть два разных значения в Javascript. Вы можете думать о null как о значении, которое неизвестно или бессмысленно, и undefined, поскольку это свойство не существует.

С другой стороны, если нет необходимости в том, чтобы кто-либо делал это различие, продолжайте и оставьте это.

Ответ 5

Я думаю, что нет никакой разницы, когда вы используете JSON в качестве данных, стоящих за пользователем.

Разница появляется в файлах JSON-config, когда пользователь должен что-то редактировать вручную. Когда вы используете первый пример, вы даете пользователю некоторый намек на конфигурацию.