我正在创建一个以 JSON 形式返回结果的 API。当值为空时,是否应该在结果中包含键,是否有当前的最佳实践?例如:
{
"title":"Foo Bar",
"author":"Joe Blow",
"isbn":null
}
或者
{
"title":"Foo Bar",
"author":"Joe Blow"
}
由于第二个较小,我倾向于这种风格,但我不确定是否有首选风格。从客户的角度来看,这两种风格似乎在功能上是等效的。各有优缺点吗?
我正在创建一个以 JSON 形式返回结果的 API。当值为空时,是否应该在结果中包含键,是否有当前的最佳实践?例如:
{
"title":"Foo Bar",
"author":"Joe Blow",
"isbn":null
}
或者
{
"title":"Foo Bar",
"author":"Joe Blow"
}
由于第二个较小,我倾向于这种风格,但我不确定是否有首选风格。从客户的角度来看,这两种风格似乎在功能上是等效的。各有优缺点吗?
我喜欢总是明确包含 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 )
第二个将节省少量带宽,但如果这是一个问题,您还可以使用索引数组而不是用键填充 JSON。显然,["Foo Bar","Joe Blow"]比你现在拥有的要短得多。
在可用性方面,我认为它没有任何区别。在这两种情况下,if(json.isbn)都会跳到else. 通常不需要区分null(无值)和undefined(无给定值)。
在 JavaScript 中,这null意味着与undefined.
您的 JSON 输出应反映您的应用程序在使用 JSON 数据的特定上下文中使用和需要的内容。
如果需要区分null和undefined因为它们在 Javascript 中具有两种不同的含义,则绝对应该包括它。您可以将其null理解为该属性未知或无意义,以及undefined该属性不存在的含义。
另一方面,如果没有必要让任何人做出这种区分,那么继续并忽略它。
当使用 JSON 作为 API 数据载体时,是否存在 null 或空(未定义)值没有区别。可能空的更好,因为我们节省了一些有效载荷的大小。
当您想手动编辑某些内容时,JSON-config 文件会出现差异。最好在那里有空值而不是未定义的props。通过这种方式,您将提供有关配置props存在的提示。