为了账号安全,请及时绑定邮箱和手机立即绑定

如何序列化 [string]reflect.Value 类型的映射?

如何序列化 [string]reflect.Value 类型的映射?

Go
摇曳的蔷薇 2023-04-10 10:32:13
我一直在努力弄清楚如何让它发挥作用,但我被困住了。我有一个看起来像这样的对象: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——依赖于反射的解决方案很少清晰易懂,但似乎你不能改变上游数据结构,除了选择不使用它。)


查看完整回答
反对 回复 2023-04-10
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信