Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态创建JSON对象_Json_Go - Fatal编程技术网

动态创建JSON对象

动态创建JSON对象,json,go,Json,Go,下面是从JSON中提取自定义结构类型的工作代码。它使用UnmarshalJSON()创建一个对象数组。这可以进一步简化,因为JSON文件中的车辆列表会增加,并且有没有一种方法不使用switch语句来创建对象 JSON文件数据: { “车辆”: [ “汽车”, “卡车” ] } 代码: 使用类型注册表: var registeredTypes=map[string]func() driveAPI{} func init() { registeredTypes["car"]

下面是从JSON中提取自定义结构类型的工作代码。它使用UnmarshalJSON()创建一个对象数组。这可以进一步简化,因为JSON文件中的车辆列表会增加,并且有没有一种方法不使用switch语句来创建对象

JSON文件数据: { “车辆”: [ “汽车”, “卡车” ] }

代码:

使用类型注册表:

var registeredTypes=map[string]func() driveAPI{}

func init() {
  registeredTypes["car"]=func() driveAPI {return &car{}}
  registeredTypes["truck"]=func() driverAPI {return &truck{}}
}
...

for _, t := range typ.Type {
   if f, ok:=registeredTypes[t]; ok {
      v.Value = append(v.Value, f())
   }
}

这意味着维护不同车型的全球注册,尽量避免将任何东西保留在全球。这也是stdlib中的做法。您可以将包级别映射与
寄存器
导出函数一起使用。@很好,它不是全局映射,而是包的本地映射。它甚至可以是unmarshal函数的局部函数(在灵活性方面有一定的代价)。但它必须存在。我投票决定结束这个问题,因为它的解决方案只是一个普通的语言结构,与问题及其代码无关。
var registeredTypes=map[string]func() driveAPI{}

func init() {
  registeredTypes["car"]=func() driveAPI {return &car{}}
  registeredTypes["truck"]=func() driverAPI {return &truck{}}
}
...

for _, t := range typ.Type {
   if f, ok:=registeredTypes[t]; ok {
      v.Value = append(v.Value, f())
   }
}