在Go 中使用物件或字串陣列處理JSON 解組
在Go 中將JSON 解組為結構體時,您可能會遇到可以包含以下內容的欄位根據請求的不同類型(物件或字串)。例如,名為「mykey」的欄位有時可以保存內聯對象,而其他時候則包含對特定路徑處的物件的參考。
Go-Idiomatic Solution
慣用的 Go處理這種情況的方法是定義一個結構體,其中一個字段的類型是interface{}值的切片。這允許該欄位同時保存物件和字串,因為 Go 會根據傳入的 JSON 自動將它們解碼為適當的類型。以下程式碼示範了這一點:
type Data struct { MyKey []interface{} `json:"mykey"` }
類型檢查
解組 JSON 後,您可以使用類型開關來區分切片中的物件和字串:
for i, v := range data.MyKey { switch x := v.(type) { case string: fmt.Println("Got a string: ", x) case map[string]interface{}: fmt.Printf("Got an object: %#v\n", x) } }
這允許您以結構化且高效的方式處理兩種類型的值
範例
考慮以下JSON:
{ "mykey": [ {obj1}, {obj2} ] }
將此JSON 解組到資料結構後,MyKey切片將包含兩個元素,每個類型為map[string]interface{}。
或者,如果JSON 包含對物件的參考:
{ "mykey": [ "/obj1/is/at/this/path", "/obj2/is/at/this/other/path" ] }
MyKey 切片將包含兩個元素,每個元素都是字串類型。
以上是如何在 Go 中處理可變資料類型(物件或字串)的 JSON 解組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!