首頁  >  文章  >  後端開發  >  如何在 go 中的“Unmarshal”期間跳過錯誤字段?

如何在 go 中的“Unmarshal”期間跳過錯誤字段?

WBOY
WBOY轉載
2024-02-09 09:00:20341瀏覽

如何在 go 中的“Unmarshal”期间跳过错误字段?

在使用Go語言進行JSON反序列化(Unmarshal)過程中,有時候我們可能會遇到一些無法處理的錯誤欄位。這些錯誤欄位可能會導致程式終止,影響程式碼的正常執行。那麼,我們有沒有辦法在Unmarshal過程中跳過這些錯誤欄位呢?答案是肯定的。本文將為大家介紹如何在Go語言中使用一些技巧來跳過在Unmarshal期間遇到的錯誤字段,讓我們繼續往下看。

問題內容

我正在使用 json.Unmarshal(body, outputStruct) 將位元組陣列轉換為結構。解組期間可能會出現錯誤。

例如,結構是:

type Item struct {
    Price       float64  `json:"price"`
    Quantity    int      `json:"quantity"`
}

如果我將 quantity 作為浮點值而不是整數傳遞,則會引發錯誤。我想知道如何只能解組有效字段並跳過有錯誤的字段?

所以如果我解組一個 json:

{ price: 10, quantity: 2.5 }

我只想取得結構中的 price 值,但將數量保留為初始預設值。

解決方法

你不能。

如果您的 JSON 包含浮點數,您根本無法將其解組為 int。您必須:

  1. 使用 float64 並在解組​​後處理程式碼中的非整數
  2. 為您的類型寫自己的 UnmarshalJSON
  3. 執行兩步驟解組,一旦忽略("-") Quantity,這樣它就不會失敗,並且只對Quantity(新結構)進行第二次解組並忽略錯誤。

2 是「最好的」方法,但我不確定「跳過類型錯誤的欄位」背後的邏輯是什麼?如果數量為 2.5,數量會是什麼值? 0?為什麼?

以上是如何在 go 中的“Unmarshal”期間跳過錯誤字段?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除