在使用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。您必須:
-
使用 float64 并在解組后處理代碼中的非整數
為您的類型編寫自己的 UnmarshalJSON
執行兩步解組,一旦忽略 (
"-"
) Quantity
,這樣它就不會失敗,并僅對 Quantity(新結構)進行第二次解組并忽略錯誤。
2 是“最好的”方法,但我不確定“跳過類型錯誤的字段”背后的邏輯是什么?如果數量為 2.5,數量會是什么值? 0?為什么?