我一直在努力弄清楚如何讓它發揮作用,但我被困住了。我有一個看起來像這樣的對象:type PropSet map[string]*Proptype Prop struct { val reflect.Value}我需要生成它包含的所有鍵值對的 JSON 表示。我一直在閱讀關于如何編組更多普通類型的 SO 帖子,但我一直無法弄清楚如何處理 reflect.Value 類型。我想我應該能夠做這樣簡單的事情:func (p Prop) MarshalJSON() ([]byte, error) { return json.Marshal(p.val.Value().Interface())}...但它只是行不通。有什么建議么?附加說明:我沒有編寫數據結構,但我認為它使用 reflect.Value 作為映射值的原因是我們期望的值可以是整數、浮點數、字符串等。所以這本質上是需要對基本接口進行某種類型推斷以找出返回結果。
1 回答

忽然笑
TA貢獻1806條經驗 獲得超5個贊
您快到了:reflect.Value它本身沒有Value接收方方法,也不需要接收方方法。將您的MarshalJSON實施更改為以下工作:
func (p Prop) MarshalJSON() ([]byte, error) {
return json.Marshal(p.val.Interface())
}
.Value()(即從函數調用鏈中刪除)。
游樂場鏈接
(我不喜歡這里的使用reflect——依賴于反射的解決方案很少清晰易懂,但似乎你不能改變上游數據結構,除了選擇不使用它。)
- 1 回答
- 0 關注
- 143 瀏覽
添加回答
舉報
0/150
提交
取消