2015-10-16 190 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都允許空值,並讓您決定是否忽略空值或空值的字段。你可以在不破壞對象語義的情況下決定案例