使用變體結構解碼JSON
您正在使用的端點以不同格式返回JSON,有時作為字串,有時作為字串大批。為了解決這種不一致問題,以下問題探討了設計可容納這兩種類型的 Go 結構體的最佳方法。
問題:
如何建立一個 Go可以用變數類型(字串或字串陣列)解組 JSON 資料的結構體?除了嘗試解碼為兩個單獨的結構之外,是否有一個優雅的解決方案?
答案:
更複雜的方法是將 JSON 解組為 interface{} 型。這種與類型無關的方法允許動態處理不同的值類型。
要實現此技術,請建立一個具有interface{} 類型欄位的結構體,如以下範例所示:
<code class="go">type Response struct { Message interface{} `json:"message"` }</code>
將JSON 資料解組到此結構時,可以使用類型開關或類型斷言來確定Message 欄位的實際類型。這使您可以相應地處理數據。
這是一個範例實作:
<code class="go">func main() { inputs := []string{ `{"message":"Message"}`, `{"message":["ERROR_CODE"]}`, } for _, input := range inputs { var r Response if err := json.Unmarshal([]byte(input), &r); err != nil { panic(err) } switch x := r.Message.(type) { case string: fmt.Println("Success, message:", x) case []interface{}: fmt.Println("Error, code:", x) default: fmt.Println("Something else:", x) } } }</code>
輸出:
Success, message: Message Error, code: [ERROR_CODE]
透過使用interface{}方法,您可以獲得靈活處理不同類型的JSON 數據,簡化您的程式碼庫。
以上是如何使用變數類型解組 JSON 資料:字串或字串陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!