2015-10-16 168 views
4

我(服务器java开发人员)和两位同事(ios和Android开发人员)都有问题(实际上有争议)。我必须在JSON中替换它们从我的服务器中检索的所有空字段(该字段可以是我自定义对象的字段)以空引号(注意,Java是一种语言一个静态类型)。原因是:他们找不到解决方案,它允许反序列化我的JSON(映射到对象),如果它将具有空值。JSON中的空字段:空引号,空值或删除字段?

我的看法:java序列化程序不能在值级别操作,只能在类型级别上操作。所以,我只能为某些类编写序列化程序。而且,我不知道为什么,但空的报价而不是空的对我来说似乎是非常糟糕的做法,这可能会在未来造成很多问题。

+0

“他们找不到解决方案” - JSON格式允许有'null'值,因此任何语言的任何JSON库都应该支持它们。 – rsutormin

+0

如果您有兴趣转换JSON,用空qou替代所有空值,那么您可以使用JSON标记流方法,并通过'“”'更改每个'null'标记。它应该非常高效。 – rsutormin

+0

@rsutormin我认为,改变JSON是一个完全错误的想法,我需要的是从外部看。 –

回答

2

假设您试图推断您的字段的类型,因此一个名为f的假设通常包含number s。

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

一旦发生f实际上是null服务器端,您是否有意义将空字符串替换为null值?不是我。

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

也就是说,包含null值的方法对我而言听起来更加连贯。

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

在最坏的情况下,如果他们不想处理null的值,他们可以引入一个图层,用默认图层替换它们来推动它们。那样的话,你永远可以说api是有意义的。

1

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

这有三个优点:

  1. 未使用的键返回,响应变得更干净和紧凑。

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

  3. 离开闲置了让API消除他们

大多数框架之前变化更加容易,因为你不需要处理未知属性时,首先留空支持这种处理(如JacksonObjectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false))。

+0

是的,这对我也很疯狂!你知道,在这个问题的讨论中,我感到自己像一个异端%) –

0

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