JSON 解碼為結構體與映射
在所描述的場景中,應用程式接收一個包含與JSON 匹配的結構體的介面{}作為位元組數組接收的結構。然而,在 JSON 解碼時,結果是一個映射而不是預期的結構。
此行為是由於 json.Unmarshal 處理指標的方式造成的。透過引用最初保存此結構的介面{},解碼過程無法確定底層類型。因此,它會傳回一個簡單的映射,而不是所需的結構。
要修正此問題,可以考慮兩種方法:
1。直接介面轉換:
將指向結構體的指標直接傳遞給json.Unmarshal 作為抽象介面:
<code class="go">var ping interface{} = &Ping{} deserialize([]byte(`{"id":42}`), ping)</code>
2.基於反射的指標建立:
如果指向結構體的直接指針不可用,請利用反射創建一個新指針,反序列化到其中,然後將值複製回來:
<code class="go">var ping interface{} = Ping{} nptr := reflect.New(reflect.TypeOf(ping)) deserialize([]byte(`{"id":42}`), nptr.Interface()) ping = nptr.Interface()</code>
通過採用這兩種方法中的任何一種,解碼過程都可以正確識別底層結構並從JSON 資料填入其欄位。
以上是以下是一些標題選項,重點關注問題和解決方案: **直接問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!