JSON中对于空对空的约定是什么?

rzr*_*yea 51 javascript json

我知道在大多数编程场景中,当有0个元素时,首选的是空集合为null集合.但是,大多数使用JSON的语言(如JavaScript)会将空列表/对象视为true,将null视为false.例如,这将是true和JavaScript中的对象:

{
    "items_in_stock": {"widgets":10, "gadgets": 5}
}
Run Code Online (Sandbox Code Playgroud)

但这也是事实:

{
    "items_in_stock": {}
}
Run Code Online (Sandbox Code Playgroud)

这是错误的:

{
    "items_in_stock": null
}
Run Code Online (Sandbox Code Playgroud)

JSON的空对象/列表是否有约定?那么数字,布尔值和字符串呢?

Koe*_*ers 63

如果期望的返回类型是数组,则返回空数组是一种很好的编程习惯.这可以确保json的接收器可以立即将值视为一个数组,并且首先不必检查它是否为空.它与空对象({})的方式相同.字符串,布尔值和整数没有"空"形式,因此可以使用空值.

不要相信我的话.在Joshua Blochs出色的书"Effective Java"中,他描述了一些非常好的通用编程实践(通常也适用于其他编程语言).返回空集合而不是空值是其中之一.这是他书中那一部分的链接:http://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html

  • 在 JavaScript 中,你会检查 if (items_in_stock == null) 还是检查 if (items_in_stock)?JavaScript 开发人员是否更喜欢不使用该语言的“真/假”特性? (2认同)
  • 大多数人经常使用它。我个人尝试避免使用真实/虚假代码,尽管它确实有其好处(更少的代码)。它可能导致难以跟踪错误。例如:许多人为它们的函数参数设置默认值,如下所示:_function func(a){a = a || ''; ...} _。当未定义_a_,null,0,-1,'',false或NaN时,它将获得值””,该值可以是也可以不是您想要的值(通常只希望未定义或null)。这可能导致奇怪的行为。虽然很多人都使用它,因为它很方便。 (2认同)
  • 空字符串 "" 是允许的:http://json.org/ 显然,语法图显示了从引导到结束引号的无路径。 (2认同)
  • 如果没有上下文,“使用空数组而不是 null”纯粹是基于意见的。 (2认同)

小智 6

“ JSON具有一个称为null的特殊值,可以在任何类型的数据(包括数组,对象,数字和布尔类型)上进行设置。”

“ JSON空概念适用于数组和对象……数据对象没有空列表的概念。因此,对于那些属性,数据对象不采取任何措施。”

是我的消息来源。

  • 空字符串怎么办?我们已经看到 JSON 将空字符串(零长度字符串)视为 null(空字段)的问题。 (3认同)
  • 您参考的源代码显示了如何同时使用null和空对象/数组。也许我没有正确阅读它,但似乎没有建议一个。它没有解决JSON的JavaScript使用如何影响选择的问题。 (2认同)

Dav*_*ave 6

问题是我们是否要区分不同的情况:

  1. "phone" : "" = 值为空

  2. "phone" : null = "phone" 的值尚未设置

如果我们想要区分,我会使用 null 。否则,我们需要添加一个新字段,例如“isAssigned”等。这是一个旧的数据库问题。

  • 为了区分已分配/未分配的值,我们还可以使用“电话”字段本身的存在/不存在,例如,在 Web API 响应中,如果目标是仅发送必要的数据,则可以使用尽量减少交通。这种方法的敏感性取决于 Web API 响应中此类字段的数量。 (4认同)

Nik*_*Nik 5

空数组用于空集合和null其他所有内容。