JSON 是否应该包含空值

IT技术 javascript json null undefined
2021-03-06 17:41:05

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

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

或者

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

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

5个回答

我喜欢总是明确包含 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 )
我会写"propertyName" in objectFromJSON而不是objectFromJSON.hasOwnProperty("propertyName"). 另外,如果你坚持使用hasOwnProperty然后写Object.prototype.hasOwnProperty.call(objectFromJSON, "propertyName")安全。
2021-04-24 17:41:05
确切地说,更多人需要了解“”、null 和 undefined 之间的区别。这个问题的答案取决于用户的要求。
2021-04-25 17:41:05
接受答案的第一部分完全是错误的......
2021-04-25 17:41:05
请注意,检查 null 不适用于 ==,=== 是必需的(因为未定义 == null)!
2021-05-07 17:41:05
+1。另一端的人(编写代码的人)将通过显式值得到​​更好的服务。他们可能不会写 JavaScript ;-)
2021-05-20 17:41:05

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

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

如果我有声誉,我实际上会为“通常不需要区分空值”为 -1。来自 2 个原因:1. 区分存在和它们并不罕见的原因 2. 最佳实践是始终具有“明确定义”的值,这意味着始终防止任何歧义 - 1 个值的 2 个含义总是邪恶的 - 应该很清楚..
2021-04-23 17:41:05
在保存传输的字节方面,压缩比索引数组之类的东西重要得多。web-resource-optimization.blogspot.no/2011/06/...确保这是你做的第一件事。在大多数情况下,在上面添加索引数组之类的东西就是我所说的过早优化。除非您要发送大量数据。这还需要额外的解析,从而为您的应用程序增加更多复杂性。Gzipping 由浏览器无缝完成。(假设客户端是浏览器)
2021-05-01 17:41:05
+1 for通常不需要区分 null(没有值)和 undefined(没有给定值)。甚至还有一个方便的运算符!= null(非严格意图)
2021-05-14 17:41:05
随着 HTTPS 成为当今的常态(至少对于拥有庞大用户群的应用程序而言),压缩变得一团糟。参见en.wikipedia.org/wiki/CRIME_%28security_exploit%29
2021-05-16 17:41:05
我能想到的唯一情况是测试浏览器是否支持某种事件类型。比如if( typeof onbeforepaste == "undefined")看是否onBeforePaste支持。即便如此,它也没有真正的区别,因为您可以随心所欲地分配事件(如果不受支持,它们将不会做任何事情)。
2021-05-17 17:41:05

在 JavaScript 中,这null意味着与undefined.

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

JSON 中没有“未定义”,所以我认为他只询问是否包含“空”属性 -{"prop":undefined}{}.
2021-05-04 17:41:05
同意,我试图解释在接收端,如果他正在寻找要设置为 null 的特定属性,则不会。如果被遗漏,它将是未定义的。
2021-05-19 17:41:05

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

另一方面,如果没有必要让任何人做出这种区分,那么继续并忽略它。

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

当您想手动编辑某些内容时,JSON-config 文件会出现差异。最好在那里有空值而不是未定义的props。通过这种方式,您将提供有关配置props存在的提示。

您能否详细说明您的答案,并添加有关您提供的解决方案的更多描述?
2021-04-28 17:41:05