登录
首页 >  Golang >  Go问答

如何序列化 Reflect.Value 类型的映射?

来源:stackoverflow

时间:2024-04-14 21:27:34 382浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《如何序列化 Reflect.Value 类型的映射?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

我一直在尝试找出如何让它发挥作用,但我陷入了困境。

我有一个看起来像这样的对象:

type propset map[string]*prop

type prop struct {
    val reflect.value
}

我需要生成它所保存的所有键值对的 json 表示形式。我一直在阅读有关如何编组更多普通类型的帖子,但我无法弄清楚如何处理reflect.value类型。我想我应该能够做这样简单的事情:

func (p Prop) MarshalJSON() ([]byte, error) {
    return json.Marshal(p.val.Value().Interface())
}

...但它就是不起作用。有什么建议吗?

补充说明:我没有编写数据结构,但我认为它使用 reflect.value 作为映射值的原因是我们期望的值可以是整数、浮点数、字符串等。所以这本质上是需要使用基接口进行某种类型推断来找出返回结果。


解决方案


你就快到了:reflect.value 本身没有 value 接收器方法,也不需要一个。将您的 marshaljson 实现更改为以下内容:

func (p Prop) MarshalJSON() ([]byte, error) {
    return json.Marshal(p.val.Interface())
}

(即从函数调用链中删除 .value())。

Playground link

(我不喜欢在这里使用 reflect - 依赖反射的解决方案很少是清晰易懂的,但除了选择不使用它之外,似乎您无法更改上游数据结构。)

今天关于《如何序列化 Reflect.Value 类型的映射?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>