首頁 >後端開發 >Golang >如何在 Go 中處理不一致的 JSON 欄位(字串與陣列)?

如何在 Go 中處理不一致的 JSON 欄位(字串與陣列)?

DDD
DDD原創
2024-12-06 15:30:13214瀏覽

How Can I Handle Inconsistent JSON Fields (Strings vs. Arrays) in Go?

使用不一致欄位解組JSON:處理字串和陣列

將JSON 資料解組到Go 結構體時,處理欄位可能具有挑戰性其類型可能有所不同。例如,欄位在大多數情況下可能是字串,但有時可能是字串陣列。為了解決這個問題,我們提出了一個利用 Go 強大的 JSON 解析能力的解決方案。

使用 json.RawMessage 擷取變化欄位

處理不一致 JSON 欄位的關鍵關鍵在於使用 json.RawMessage 擷取原始資料。此類型是儲存未解析的 JSON 值的位元組切片。透過儲存原始數據,我們可以靈活地根據其特定類型稍後對其進行解析。

隱藏DisplayName 字段並在解碼後填充它

以防止為了防止解碼器在獲得相關數據之前嘗試解釋DisplayName 字段,我們使用JSON“-”名稱隱藏它。此名稱指示解碼器在初始解碼期間忽略該欄位。頂級 JSON 解碼後,我們根據解析的原始資料手動填入 DisplayName 欄位。

處理各種類型的原始資料

取決於無論原始資料是字串還是字串數組,我們都如下進行:

  • 如果原始資料是string,我們將其解組為單一字串並將其指派給DisplayName。
  • 如果原始資料是字串數組,我們將其解組為字串切片,並在將字串與 a 連接後將其儲存在 DisplayName 中分隔符號。

整合到循環中MyListings

要處理項目清單(例如MyListings),我們可以迭代每個項目並執行與上述相同的解組邏輯。這使我們能夠處理每個項目的 DisplayName 欄位中的任何不一致。

使用自訂解組器封裝邏輯

如果資料模型中的多個欄位可能不一致類型,將邏輯封裝在實作json.Unmarshaler 介面的自訂類型中是有益的。這簡化了流程並減少了重複。

總之,透過使用 json.RawMessage 並隱藏變化的字段,我們可以有效地解組具有不一致字段的 JSON 數據,確保正確捕獲和解析所有必要的數據。提供的範例和遊樂場連結演示了實踐中的解決方案。

以上是如何在 Go 中處理不一致的 JSON 欄位(字串與陣列)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn