0

我正在构建我的第一个以 JSON 输出的 API,并且想知道:如果其中一个参数为空,最好还是将该参数名称包含一个空值,还是根本不包含它?例如,如果某个产品有电池,它通常会输出

"batteries": [
            {
                "device": "Vehicle",
                "number": "4",
                "type": "AA",
                "included": "Not Included"
            },
            {
                "device": "Remote",
                "number": "2",
                "type": "AAA",
                "included": "Not Included"
            }
        ],

如果没有远程电池,我是否应该不包括第二部分?如果根本没有电池怎么办,我应该移除整个电池节点吗?

4

2 回答 2

3

从 json 解释器的角度来看,这无关紧要。您应该发送 JSON,但是您希望消费者重建您的对象......您是否希望消费者拥有一个“远程”对象来指示没有电池?

您的示例对我来说看起来不像是一个空节点,它看起来像是有意义的数据!

对于实际为空的节点,如果您需要使序列化对象尽可能小(无论出于何种原因),或者如果您需要除 JSON 之外的其他内容,请稍后查看序列化对象。

在我个人看来,我喜欢看到所有有意义的节点都被填充,因为它让我了解了 API 的可能性......“哦,我明白了,所以其中一些有遥控器,包括电池,这个 API可以告诉我!”

于 2013-05-16T19:48:58.650 回答
0

在 Javascript 中,您可以使用几乎与将属性设置为 null 相同的方式来处理缺失的属性:

> a_unset = {}
> a_null = {a: null}
> a_null.a == a_unset.a
true
> a_null.a ? 1 : 0
0
> a_unset.a ? 1 : 0
0

因此,在基于 Javascript 且最常被 Javascript 代码使用的 JSON 中,通常会省略空值。

但这不是硬性规定。JSON 确实提供了 null 值,因此如果您认为您的客户端代码或目标用户需要知道某个属性存在但未设置,那么 null 可能是一个不错的选择。否则就省略它,你会节省空间。

于 2013-05-16T19:57:37.147 回答