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