Unmarshal中的动态类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unmarshal中的动态类型相关的知识,希望对你有一定的参考价值。
我目前遇到以下问题:
我通过websocket得到一个[]字节/字符串,看起来像
eventname {"JSON": "data", "In": "different formats"}
我通过eventname和JSON数据之间的空格拆分字符串,并且根据事件名称,我想将JSON.Unmarshal()JSON数据转换为特定类型或特定类型的var,以确保其全部类型安全。
所以我可能有一个地图,其中包含所有可能的事件名称和JSON数据的相应类型,但我不知道如何保存类型,可能通过引用或字符串化名称?
type EventTypeList map[string]*interface{}
要么
type EventTypeList map[string]string
所以我可以查找事件是否在EventTypeList中,然后让Unmarshal func将数据解析为地图中的类型。
所以基本上不是特定类型“特定数据”:
type SpecificData struct {
JSON string
In string
}
socketData := SpecificData{}
err := json.Unmarshal(jsonData, &socketData)
我想通过EventTypeList中的类型动态创建socketData var
socketData := [dynamically determine this Type from EventTypeList]{}
在将数据解析为该类型之后,我想调用该事件的所有侦听器并为它们提供具有正确类型的socketData,以便它们可以处理预期的数据。
但我真的不确定如何做到这一点,如果这是可能的,或者这是正确的方式......
谢谢你的帮助!
好的,经过研究,我认为我想要实现的是不可能的,因为在编译时需要知道类型,因为这里已经提到过:
Golang: cast an interface to a typed variable dynamically
但我想我可以将原始JSON字符串传递给侦听器回调并解组该函数中已知数据类型的数据。
感谢所有的贡献!
以上是关于Unmarshal中的动态类型的主要内容,如果未能解决你的问题,请参考以下文章
RecyclerView holder中的Android Google Maps动态片段
markdown Golang json processing.md中的marshal和unmarshal问题