Я создаю API, который возвращает результаты в формате JSON. Есть ли в настоящее время лучший способ включения ключей в результат, когда значение равно нулю? Например:
{
"title":"Foo Bar",
"author":"Joe Blow",
"isbn":null
}
или
{
"title":"Foo Bar",
"author":"Joe Blow"
}
Поскольку второй меньше, я склоняюсь к этому стилю, но не уверен, есть ли какой-то предпочтительный стиль или нет. С точки зрения клиента кажется, что оба стиля будут функционально эквивалентны. Есть ли плюсы или минусы для каждого?
javascript
json
null
undefined
Jjathman
источник
источник
Ответы:
Второй вариант позволит немного сэкономить на пропускной способности, но если бы это было проблемой, вы также могли бы использовать индексированные массивы вместо заполнения JSON ключами. Ясно,
["Foo Bar","Joe Blow"]
что намного короче того, что есть сейчас.Что касается удобства использования, я не думаю, что это имеет значение. В обоих случаях
if(json.isbn)
произойдет переход к файлуelse
. Обычно нет необходимости различатьnull
(нет значения) иundefined
(нет значения).источник
!= null
(нестрогий)if( typeof onbeforepaste == "undefined")
чтобы узнать,onBeforePaste
поддерживается ли. Даже тогда это не имеет значения, поскольку вы можете назначать событиям все, что захотите (они просто ничего не будут делать, если не поддерживаются).Я сторонник того, чтобы всегда явно указывать null, поскольку это имеет смысл. Если пропустить свойство, остается двусмысленность.
Пока ваш протокол с сервером согласован, все вышеперечисленное может работать, но если вы передадите с сервера значения 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 )
источник
"propertyName" in objectFromJSON
вместоobjectFromJSON.hasOwnProperty("propertyName")
. Кроме того, если вы настаиваете на использовании,hasOwnProperty
пишитеObject.prototype.hasOwnProperty.call(objectFromJSON, "propertyName")
для безопасности.В JavaScript это
null
означает нечто совершенно иное, чемundefined
.Выходные данные JSON должны отражать то, что используется и требуется вашим приложением в конкретном контексте использования данных JSON.
источник
{"prop":undefined}
отличается от{}
.Вы обязательно должны включить его, если есть необходимость различать
null
иundefined
поскольку они имеют два разных значения в Javascript. Вы можете думать об этомnull
как о том, что свойство неизвестно или бессмысленно, иundefined
как о том, что свойство не существует.С другой стороны, если кому-либо нет необходимости проводить такое различие, оставьте это в стороне.
источник
Я думаю, нет никакой разницы, когда вы используете JSON в качестве данных, лежащих в основе опыта пользователя.
Разница проявляется в файлах конфигурации JSON, когда пользователь должен что-то отредактировать вручную. Когда вы используете первый пример, вы даете пользователю некоторую подсказку о конфигурации.
источник