Home Articles

如何将map [string] interface {}转换为不同类型的struct?

Asked
Viewed 1844 times
0

我正在调用一个API,它会像这样返回Json对象:

{
  name: "XXX"
  type: "TYPE_1"
  shared_fields: {...}
  type_1_fields: {...}
  ..
  type_2_fields: {...}
}

根据不同的类型,此对象将具有不同类型的字段,但这些字段对于不同类型是确定的 . 因此,我将Json字符串解组以映射[string] interface {}以获取不同的类型,但是如何将这些map [string] interface {}转换为某个结构?

var f map[string]interface{}
  err := json.Unmarshal(b, &f)
  type := f["type"]
  switch type {
    case "type_1":
      //initialize struct of type_1
    case "type_2":
      //initialize struct of type_2
  }

2 Answers

  • 1

    对于这种两步json解码,你可能想看看json.RawMessage . 它允许您推迟处理json响应的部分内容 . 文档中的示例显示了如何 .

  • 0

    一种方法是使用一个构造函数(一个以 New… 开头的函数),它将一个map作为输入参数 .

    第二种方式,在我看来慢得多,就是将解组重做为正确的结构类型 .

Related