JSON解码未知对象
我试图用结构类型解码json响应。我试图解码的对象的一个实例如下所示:JSON解码未知对象,json,go,Json,Go,我试图用结构类型解码json响应。我试图解码的对象的一个实例如下所示: { "title": "Some Title", "views": 344, "profiles": { "customField": "somevalue", "customField2:" :somevalue" } } golang结构如下所示: type Topic struct { Title string `json:"title"` View
{
"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"`
}
正如您所看到的,“Profiles”属性是一个字符串,因为Profiles对象是未知的,因为其中的字段可以被动态定义
我正试图用以下方法来解码:
json.NewDecoder(response.Body).Decode(result)
其中结果的类型为Topic,但不起作用。为了正确解码答案,“Profiles”属性应该是什么类型
谢谢 阅读注释显然profiles值可以是任何类型,因此我建议您将profiles类型声明为
map[string]接口{}
主题变成:
type Topic struct {
Title string `json:"title"`
Views int32 `json:"views"`
Profiles map[string]interface{} `json:"profiles"`
}
阅读注释很明显profiles值可以是任何类型,因此我建议您将profiles类型声明为
map[string]接口{}
主题变成:
type Topic struct {
Title string `json:"title"`
Views int32 `json:"views"`
Profiles map[string]interface{} `json:"profiles"`
}
退房
自述文件中有一个你可能会寻找的答案
问题是,若您的配置或编码根据特定字段略有变化
如果不先从JSON中读取“type”字段,我们可能无法填充特定的结构。我们总是可以在JSON的解码过程中进行两次传递(首先读取“type”,然后读取其余部分)。但是,只需将其解码为map[string]接口{}结构,读取“type”键,然后使用类似于此库的内容将其解码为适当的结构,就简单多了
退房
自述文件中有一个你可能会寻找的答案
问题是,若您的配置或编码根据特定字段略有变化
如果不先从JSON中读取“type”字段,我们可能无法填充特定的结构。我们总是可以在JSON的解码过程中进行两次传递(首先读取“type”,然后读取其余部分)。但是,只需将其解码为map[string]接口{}结构,读取“type”键,然后使用类似于此库的内容将其解码为适当的结构,就简单多了
如果配置文件可能有所不同,您应该在此处选择
json.RawMessage
。在内部,它是一个[]字节
,可以将其解组为其他类型,例如,取决于外部文档的值
请参阅和示例。如果配置文件可能有所不同,则应在此处使用
json.RawMessage
。在内部,它是一个[]字节
,可以将其解组为其他类型,例如,取决于外部文档的值
请参阅和示例。配置文件应该是一个结构,与容器一起启动,在这种情况下,我假设它是一个状态,例如FB状态或Tweet,我在这里做了一个示例
请记住,在开始解组之前,在新创建的状态中实例化新配置文件。配置文件应该是一个结构,并与容器一起启动,在这种情况下,我假设它是一个状态,例如FB状态或Tweet,我在这里举了一个例子
在开始解组之前,请记住在新创建的状态中实例化新配置文件。配置文件值是否始终为字符串?在
profile
中是否有您感兴趣的字段列表。或者,您必须读取所有字段并对其进行操作,无论它们是什么?配置文件值可以是任何内容。我唯一需要的是能够将响应发送到web客户端,而无需修改或读取任何内容(我正在从第三方api检索该值,然后返回到客户端)“profiles”值始终是字符串吗?您是否在profile
中有感兴趣的字段列表。或者,您必须读取所有字段并对其进行操作,无论它们是什么?配置文件值可以是任何内容。我唯一需要的是能够将该响应发送到web客户端,而无需修改或读取任何内容(我正在从第三方api检索该值,然后返回到客户端),因为您的结构中有输入错误。应该是“字符串”。但是我不能建议修改少于10个字符。你的结构有一个打字错误。应该是“字符串”。不过,我不能建议修改少于10个字符。