JSON应该包含空值

时间:2012-06-12 19:23:45

标签: javascript json null undefined

我正在创建一个以JSON格式返回结果的API。当值为null时,是否应该在结果中包含键,是否存在当前的最佳实践?例如:

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

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

由于第二个较小,我倾向于这种风格,但我不确定是否有一个首选的风格。从客户的角度来看,似乎两种风格在功能上都是等同的。各有利弊吗?

5 个答案:

答案 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)

如果有必要区分nullundefined,您肯定应该包含它,因为它们在Javascript中有两种不同的含义。您可以将null视为属性未知或无意义,undefined表示该属性不存在。

另一方面,如果没有人需要做出这种区分,那就继续吧。

答案 4 :(得分:0)

我认为将JSON用作用户体验背后的数据没有区别。

当用户应手动编辑某些内容时,JSON配置文件中会出现差异。当您使用第一个示例时,您将为用户提供有关配置的一些提示。