我正在创建一个以JSON格式返回结果的API。当值为null时,是否应该在结果中包含键,是否存在当前的最佳实践?例如:
{
"title":"Foo Bar",
"author":"Joe Blow",
"isbn":null
}
或
{
"title":"Foo Bar",
"author":"Joe Blow"
}
由于第二个较小,我倾向于这种风格,但我不确定是否有一个首选的风格。从客户的角度来看,似乎两种风格在功能上都是等同的。各有利弊吗?
答案 0 :(得分:76)
我是一个总是包含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 )
答案 1 :(得分:30)
第二个会节省一小部分带宽,但如果这是一个问题,你也可以使用索引数组,而不是用密钥填充JSON。显然,["Foo Bar","Joe Blow"]
比你现在的要短得多。
在可用性方面,我认为它没有任何区别。在这两种情况下,if(json.isbn)
都会跳到else
。通常无需区分null
(无值)和undefined
(无给定值)。
答案 2 :(得分:21)
在JavaScript中,null
表示与undefined
非常不同的内容。
您的JSON输出应反映应用程序在使用JSON数据的特定上下文中使用和需要的内容。
答案 3 :(得分:11)
如果有必要区分null
和undefined
,您肯定应该包含它,因为它们在Javascript中有两种不同的含义。您可以将null
视为属性未知或无意义,undefined
表示该属性不存在。
另一方面,如果没有人需要做出这种区分,那就继续吧。
答案 4 :(得分:0)
我认为将JSON用作用户体验背后的数据没有区别。
当用户应手动编辑某些内容时,JSON配置文件中会出现差异。当您使用第一个示例时,您将为用户提供有关配置的一些提示。