95

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

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

或者

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

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

4

5 回答 5

84

我喜欢始终明确地包含 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 )
于 2013-08-22T22:24:40.913 回答
32

第二个将节省少量带宽,但如果这是一个问题,您还可以使用索引数组而不是用键填充 JSON。显然,["Foo Bar","Joe Blow"]比你现在拥有的要短得多。

在可用性方面,我认为它没有任何区别。在这两种情况下,if(json.isbn)都会跳到else. 通常不需要区分null(no value) 和undefined(no given value)。

于 2012-06-12T19:27:39.027 回答
23

在 JavaScript 中,null意味着与undefined.

您的 JSON 输出应反映您的应用程序在使用 JSON 数据的特定上下文中使用和需要的内容。

于 2012-06-12T19:25:23.103 回答
12

如果有任何需要区分nullundefined因为它们在 Javascript 中有两种不同的含义,你绝对应该包括它。您可以null将属性视为未知或无意义undefined的含义,以及属性不存在的含义。

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

于 2012-06-12T19:25:53.263 回答
1

当 JSON 用作 API 数据载体时,是否存在 null 或空(未定义)值没有区别。可能,空的更好,因为我们节省了一些有效载荷大小。

当您想手动编辑某些内容时,JSON-config 文件会出现差异。最好有空值而不是未定义的道具。这样,您将给出有关配置道具存在的提示。

于 2015-06-18T07:51:01.963 回答