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

标签 web-services json conventions

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

考虑这个例子:我的网上商店有一个产品的价格未知,可能是因为该产品尚未发布。我是否包括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 服务设计的“最佳实践”,支持显式或隐式空值?任何事实上的标准?还是完全取决于用例?

最佳答案

FWIW,我的个人意见:

Do I include price: null (as shown below) or do I simply omit the price property on this item?



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

There could be a whole bunch of properties that are completely irrelevant to this particular product, while relevant for other products – should I show these as explicitly null as well?



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

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

关于web-services - 在 JSON 中将缺失值显示为 null 或根本不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6774584/

相关文章:

javascript - 使用firebase存储数据以生成xml

java - 当字段变量是最终变量时是否需要 setter/getter ?

JavaScript:对传递给函数的变量使用相同的名称是好习惯吗?

c# - 将数据集的两个结果合并为一个

java - SoapUI 或 WSDL2Java 无法读取由 Axis2 服务生成的 WSDL

java - 从 JSON 响应中获取 String[][] 数组

python - tastypie api 不在 json 结果中显示 ForeignKey

web-services - 如何检测 WSDL 契约(Contract)中的重大更改?

c# - 使用 WCF 从 .svc 创建 .cs 文件的正确方法

F# 在 do block 中包装语句