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

我试图用结构类型解码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"`
}
正如您所看到的,“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个字符。