将缺失的值在JSON中表示为null或不表示。

7

我正在构建一个使用JSON作为数据语言的Web服务API。在设计服务返回的数据结构时,我遇到了一些困难,不知道如何处理缺失的值。

考虑以下例子:我的网店中有一个产品,其价格尚未确定,可能是因为该产品尚未发布。我应该包含price: null(如下所示),还是仅省略此项上的price属性?

{
    name: 'OSX 10.6.10',
    brand: 'Apple',
    price: null
}

我的主要关注点是尽可能使API易于使用。显式的null值清楚地表明产品上可以期望价格,但另一方面它似乎浪费字节。可能会有许多属性对于这个特定的产品来说完全不相关,但对于其他产品来说却很重要 - 我应该像显式的null值一样显示这些吗?

{
    name: 'OSX 10.6.10',
    price: 29.95,
    color: null,
    size: null
}

在Web服务设计方面,有没有关于显式或隐式空值的“最佳实践”?有任何事实标准吗?还是完全取决于使用情况?

2个回答

4

就我个人而言,我的意见是:

我应该将price: null(如下所示)包含在内,还是简单地省略此项的价格属性?

我会将“标准”字段的值设置为null。尽管 JSON 经常与 JavaScript 一起使用,在那里,缺少的属性可以类似于设置为 null 的属性进行处理,但这对其他语言(例如 Java)可能并非如此。必须先测试一个字段是否存在似乎不太方便。将值设置为null但保留字段会更加一致。

可能会有许多与此特定产品完全无关的属性,而对其他产品有关系 - 我也应该将它们显示为明确的null吗?

我只会包括与产品相关的那些字段(例如 CD 的不是pages)。客户端的任务是正确处理这些“可选”字段。如果某个字段对于产品很重要,但您没有任何值,请将其设置为null


正如已经说过的,最重要的是保持一致,并清楚地指定可以预期哪些字段。您可以使用 gzip 压缩来减小数据大小。


0

我不知道哪种是“最佳实践”。但通常我不会发送我不需要的字段。当我读取响应时,我会检查值是否存在:

if (res.size) {
  // response has size
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接