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/

相关文章:

ios - NSFetchedResultsController 和 WebService

javascript - 文本响应需要 Double JSON.parse() 的实例

java - 如何使用Java从json文件中提取每个元素(书签)作为一个项目?

api - 编写从 Lua 调用的 API - 基于 0 还是 1?

android - 有没有网络服务可以给我 IMDb 的电影列表?

java - 将 env 特定属性传递到 webapp

ruby - Ruby 中的私有(private)方法应该放在哪里?

PHP 与 JavaScript 切换缩进

java - 如何使用 JAXB 将自定义 "type"属性添加到我的 XML 中?

java - Spring MockMvc - 从 REST 获取 java.time.Instant