在JSON中将缺失值显示为null或根本不显示

时间:2011-07-21 10:24:18

标签: web-services json conventions

我正在使用JSON作为数据语言构建Web服务API。设计从服务返回的数据结构,我在决定如何处理缺失值时遇到一些麻烦。

考虑这个例子:我的网上商店有一个产品价格未知,可能是因为该产品尚未发布。我是否包含price: null(如下所示)或我是否只是省略了此项目的price属性?

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

我主要关心的是让API尽可能易于使用。显式空值清楚地表明产品上可以预期price,但另一方面它似乎是浪费的字节。可能有一大堆属性与此特定产品完全无关,而与其他产品相关 - 我是否应该明确地null显示这些属性?

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

Web服务设计是否有任何“最佳实践”,支持显式或隐式空值?任何事实上的标准?或者它完全取决于用例?

2 个答案:

答案 0 :(得分:3)

FWIW,我个人意见:

  

我是否包含price: null(如下所示)或是否只是省略此商品的价格属性?

我会将“标准”字段的值设置为null。虽然JSON经常与JavaScript一起使用,但缺少的属性可以像设置为null的那样处理,但对于其他语言(例如Java)则不是这种情况。必须先测试是否存在字段似乎不方便。将值设置为null但是存在字段会更加一致。

  

可能有很多属性与这个特定产品完全无关,而与其他产品相关 - 我是否应该明确地null显示这些属性?

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


如前所述,最重要的是保持一致并明确指出可以预期的字段。您可以使用gzip压缩来减小数据大小。

答案 1 :(得分:0)

我不知道哪个是“最佳做法”。但我通常不会发送我不需要的字段。 当我阅读回复时,我检查是否存在值:

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