Unmarshal中的动态类型

时间:2018-03-06 12:37:17

标签: json go types

我目前遇到以下问题:

我通过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将数据解析为地图中的类型。

基本上不是特定类型“SpecificData”:

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,以便它们可以处理预期的数据。

但我真的不确定如何做到这一点,如果这是可能的,或者这是正确的方式......

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

好的,在重新研究之后,我认为我想要实现的目标是不可能的,因为类型需要在编译时知道,如下所述:

Golang: cast an interface to a typed variable dynamically

但我认为我可以将原始JSON字符串传递给侦听器回调并解组该函数中已知数据类型的数据。

感谢您的所有贡献!