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

Jør*_*ode 6 json web-services conventions

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

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

{
    name: 'OSX 10.6.10',
    brand: 'Apple',
    price: null
}
Run Code Online (Sandbox Code Playgroud)

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

{
    name: 'OSX 10.6.10',
    price: 29.95,
    color: null,
    size: null
}
Run Code Online (Sandbox Code Playgroud)

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

Fel*_*ing 5

FWIW,我个人的看法:

\n\n
\n

我是否包含price: null(如下所示)或是否简单地忽略该商品的价格属性?

\n
\n\n

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

\n\n
\n

可能有一大堆与该特定产品完全无关的属性,而与其他产品相关 \xe2\x80\x93 我是否也应该明确显示这些属性null

\n
\n\n

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

\n\n
\n\n

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

\n