首頁 > 後端開發 > Golang > 主體

## 為什麼 `json.Unmarshal` 在解組到介面{}時回傳映射而不是結構?

Susan Sarandon
發布: 2024-10-26 06:24:02
原創
264 人瀏覽過

## Why does `json.Unmarshal` return a map instead of a struct when unmarshaling into an interface{}?

JSON 編組介面的異常回傳類型

在使用json.Unmarshal 將位元組數組轉換為介面{}的場景中,當當傳回映射而不是預期的結構類型時,可能會出現意外結果。這種差異可以歸因於interface{}類型的抽象性質,使得json套件無法辨別底層結構結構。

要修正這種異常,建議明確傳遞指向所需的指標struct,將其轉換為抽象介面。這種方法允許 json 套件相應地識別和反序列化結構。

例如,以下修改後的程式碼片段說明了所需的行為:

<code class="go">func bad() {
    var ping interface{} = &Ping{} // Pass a pointer to Ping as an interface
    deserialize([]byte(`{"id":42}`), ping)
    fmt.Println("DONE:", ping) // Now outputs a Ping struct
}</code>
登入後複製

或者,如果存取指標是不可行,可以利用動態分配來建立可以反序列化的新指針。然後可以使用新值更新原始 interface{} 值。

<code class="go">func bad() {
    var ping interface{} = Ping{}
    nptr := reflect.New(reflect.TypeOf(ping))
    deserialize([]byte(`{"id":42}`), nptr.Interface())
    ping = nptr.Interface()
    fmt.Println("DONE:", ping) // Outputs a Ping struct
}</code>
登入後複製

透過採用其中一種技術,json.Unmarshal 函數可以準確地將位元組數組反序列化為所需的結構類型,從而消除意外的地圖返回值。

以上是## 為什麼 `json.Unmarshal` 在解組到介面{}時回傳映射而不是結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!