首頁 >後端開發 >Golang >如何使用 Go 中的介面變數將 JSON 解組為特定結構?

如何使用 Go 中的介面變數將 JSON 解組為特定結構?

Susan Sarandon
Susan Sarandon原創
2024-11-27 16:58:11522瀏覽

How to Unmarshal JSON into a Specific Struct Using an Interface Variable in Go?

如何使用介面變數將JSON 解組為特定結構

問題:

問題:

何時將JSON 解組為介面變量,encoding/json 套件將其解釋為映射。我們如何指示它使用特定的結構?

解釋:

JSON 套件在解組時需要一個具體類型作為目標。傳遞interface{}變數並不能提供足夠的訊息,套件預設為物件使用map[string]interface{},為陣列預設使用[]interface{}。

解決方案:
  1. 沒有內建方法告訴 json.Unmarshal 使用介面變數將其解組為具體的結構類型。但是,有一個解決方法:
func getFoo() interface{} {
    return &Foo{"bar"}
}
    將指標包裝到介面變數中所需的結構。
err := json.Unmarshal(jsonBytes, fooInterface)
    將包裝的指標傳給 json。解組。
fmt.Printf("%T %+v", fooInterface, fooInterface)

存取透過介面變數解組資料。

範例:
package main

import (
    "encoding/json"
    "fmt"
)

type Foo struct {
    Bar string `json:"bar"`
}  

func getFoo() interface{} {
    return &Foo{"bar"}
}

func main() {

    fooInterface := getFoo() 
    
    myJSON := `{"bar":"This is the new value of bar"}`
    jsonBytes := []byte(myJSON)

    err := json.Unmarshal(jsonBytes, fooInterface)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Printf("%T %+v", fooInterface, fooInterface) // prints: *main.Foo &{Bar:This is the new value of bar}
}
以下程式碼示範了此技術:

以上是如何使用 Go 中的介面變數將 JSON 解組為特定結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn