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问题

golang 将json映射到GO中的struct,用于直接编组,unmarshal

Android片段中的动态背景

使用 JAXB 和 Unmarshal 过早结束文件。响应中的 xml 对我来说似乎有效