英文:
Unmarshal dynamic json content in Go
问题
我有一个动态的 JSON 对象,我想在我的 Go 应用程序中进行解组。问题是,JSON 的某些部分是动态命名的,所以我不知道应该在结构类型的 JSON 标签中放什么。为了说明我的问题,请参考这个 playground:https://play.golang.org/p/q8J0VVO7uj
如你所见,s1
可以完美地解组,因为结构类型确实有 description
标签。但是 s2
无法解组。
所以我的问题是:我该如何解决这个问题?我能在这里使用接口吗?
英文:
I have a dynamic json object which I want to unmarshal in my Go app. The problem is that some parts of the json are dynamically named, so I don't know what to put in the struc type json tags. To illustrate my problem, please see this playground: https://play.golang.org/p/q8J0VVO7uj
As you can see the s1
can perfectly be unmarshalled, because the struct type indeed has tag description
. But s2
cannot be unmarshalled.
So my question is: how can I solve this? Can I make use of interfaces here?
答案1
得分: 1
使用映射(map)来处理动态键:
type ElvisEvent struct {
Timestamp int64 `json:"timestamp"`
Type string `json:"type"`
AssetID string `json:"assetId"`
Metadata struct {
} `json:"metadata"`
ChangedMetadata map[string]struct {
OldValue interface{} `json:"oldValue"`
NewValue interface{} `json:"newValue"`
} `json:"changedMetadata"`
}
英文:
Use a map for dynamic keys:
type ElvisEvent struct {
Timestamp int64 `json:"timestamp"`
Type string `json:"type"`
AssetID string `json:"assetId"`
Metadata struct {
} `json:"metadata"`
ChangedMetadata map[string]struct {
OldValue interface{} `json:"oldValue"`
NewValue interface{} `json:"newValue"`
} `json:"changedMetadata"`
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论