go - 如何序列化 [string]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()
(即从函数调用链中删除)。
(我不喜欢reflect
这里的使用——依赖反射的解决方案很少清晰易懂,但似乎你无法更改上游数据结构,除了选择不使用它。)
推荐阅读
- ios - 使用 Itext 7.1.14 无法在 iPhone 上的 SVG 中定位文本
- python - 根据字符串计算df中的行
- numpy - 从 .VTU 文件访问和操作 Ccell 数据
- machine-learning - 假设在 Pytorch 中调用 torch.distributed.destroy_process_group() 在哪里?
- reactjs - React App 只为 App.js 中的某些路由包装高阶组件
- r - 记录 Cox 模型的部分可能性
- ruby-on-rails - Rails turbo 帧响应未触发 turbo:load
- node.js - 如何在 nodejs 路由中正确使用 express clearCookie?
- r - 如何在ggplot中取lm回归的斜率
- python - Celery 4.4.0、django 和 Flower:Celery worker 接收到已经被其他 worker 执行的任务。它未执行但已添加到已处理