JSON解码未知对象
我试图解码与结构类型的JSON响应。我试图解码对象的实例如下所示:JSON解码未知对象
{
"title": "Some Title",
"views": 344,
"profiles": {
"customField": "somevalue",
"customField2:" :somevalue"
}
}
的golang结构如下:
type Topic struct {
Title string `json:"title"`
Views string `json:"views"`
Profiles string `json:"profiles"`
}
正如你可以看到,在“配置文件”属性是一个字符串,因为配置文件对象是未知的,因为它里面的字段可以被定义。
我试图用解码此:
json.NewDecoder(response.Body).Decode(result)
如果结果是一个类型的话题,但没有工作。 “Profiles”属性应该是什么类型才能正确解码答案?
谢谢!
阅读评论,很明显,配置文件值可以是任何类型,因此,我建议您将配置文件类型声明为map[string]interface{}
。
主题变成:
type Topic struct {
Title string `json:"title"`
Views int32 `json:"views"`
Profiles map[string]interface{} `json:"profiles"`
}
您在结构中存在拼写错误。应该是“字符串”。尽管我不能提出少于10个变化字符的编辑。 – RayfenWindspear
退房https://github.com/mitchellh/mapstructure 自述有一个答案,你可能找。
问题是如果您有配置或编码根据特定字段略有变化。
也许我们无法先从JSON中读取“type”字段来填充特定的结构。我们总是可以在解码JSON时做两遍(首先阅读“类型”,稍后再阅读“类型”)。然而,将它解码成map [string] interface {}结构要简单得多,读取“type”键,然后使用类似这个库的东西将它解码为适当的结构。
如果配置文件可能会有所不同,您应该在这里采取json.RawMessage
。在内部,它是一个[]byte
,后者可以解组为其他类型,例如,取决于外部文档的值。
的Profiles
应该是一个结构,并与容器一起发起的,在这种情况下,我认为这是一个状态,比如FB地位或鸣叫我做了这里https://play.golang.org/p/tG90idakLP
一个例子记住实例化新在开始解组之前,新创建状态中的配置文件。
“配置文件”值始终是字符串吗? – JimB
您是否有''profile'中您感兴趣的字段列表?或者您必须阅读所有字段并对它们进行操作,无论它们是什么? – nu11p01n73R
配置文件值可以是任何值。我唯一需要的是能够将该响应发送到Web客户端,而无需修改或读取任何内容(我从第三方api中检索该值,然后返回到客户端) – Lucia