首頁 > 後端開發 > Golang > 如何在 Go 中處理可變資料類型(物件或字串)的 JSON 解組?

如何在 Go 中處理可變資料類型(物件或字串)的 JSON 解組?

Barbara Streisand
發布: 2024-12-03 00:51:15
原創
225 人瀏覽過

How Can I Handle JSON Unmarshaling with Variable Data Types (Objects or Strings) in Go?

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板