JSON中的空字段:空引号,空值或删除字段?

时间:2015-10-16 06:35:28

标签: java serialization client-server

我(服务器java开发人员)和我的两个同事(ios和Android开发人员)有问题(实际上是争议)。

移动开发人员的意见:我必须更换JSON,他们从我的服务器检索,所有空字段(此字段可以是我的自定义对象的字段)为空引号(注意,Java是一种语言,具有静态类型)。原因是:他们无法找到解决方案,它允许反序列化我的JSON(映射到对象),如果它将具有空值。

我的观点:java序列化程序不能在值级别上操作,只能在类型级别上操作。所以,我只能为某些类编写序列化程序。并且,我不知道为什么,但空洞的引号而不是空在我看来非常糟糕的做法,这可能在将来产生许多问题。

3 个答案:

答案 0 :(得分:3)

假设您正在尝试向字段推断类型,因此名为f的假设通常包含number s。

这对我来说很有意义,因为你将一种强类型语言与一种非类型语言结合起来。

如果f实际上是null服务器端,那么将空字符串替换为null值是否有意义?不是我。

我通常邀请我的团队对这类问题保持强烈的一致性,因为对于有这样一个可变领域的新人来说,这可能会更加棘手。而且,说实话,一个空字符串并不能告诉我你没有实际价值,相反它在我看来你有一个它是一个空字符串!!

也就是说,涉及null值的方法听起来更加连贯。

除了在其他回复中已经讨论过的其他提议之外,另一个解决方案可能是消除这些字段,但它会破坏其父对象的结构,但仍然可能导致比null更糟糕的问题在那里。

在最糟糕的情况下,如果他们不想处理null值,他们可以引入一个用默认值代替他们的图层来推动他们。这样,你就可以说api是有意义的。

答案 1 :(得分:1)

null序列化为''的想法对我来说听起来很疯狂(好吧,我更像是一个Java人,但创建了许多REST API)。如果反序列化null是前端的问题,我建议将这些值保留。

这有三个好处:

  1. 没有返回未使用的密钥,响应变得更加干净和紧凑。

  2. 前端没有麻烦,因为它根本不会反序列化它。

  3. 保留未使用的输出会使API更改变得更加容易,因为在删除之前首先留空时不需要处理未知属性

  4. 大多数框架都支持这种处理(例如Jackson ObjectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false))。

答案 2 :(得分:0)

将null转换为''会破坏对象的语义,听起来像是一种不好的做法。 Jackson和Gson都允许空值,让您决定是否忽略具有null值或空值的字段。您可以在不破坏对象语义的情况下逐案判断