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

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