1 回答
TA贡献1817条经验 获得超14个赞
您的尝试不起作用,因为roiByteArr, {"roi": [{ ... }]}this 不匹配config.RoI也不匹配[]config.RoI。
您可以声明一个与 json 匹配的类型:
type roiobj struct {
RoI struct {
RoI []RoI `json:"roi"`
} `json:"roi"`
}
var obj roiobj
if err := json.Unmarshal(fileByteArr, &obj); err != nil {
panic(err)
}
roi := obj.RoI.RoI[0]
或者正确检索与您的结构相匹配的对象:
// in your real code do not omit safe type assertion like i'm doing here.
obj := detectionResMap["roi"].(map[string]interface{})["roi"].([]interface{})[0]
roiByteArr, err := json.Marshal(obj)
if err != nil {
return err
}
roi := config.RoI{}
if err := json.Unmarshal(roiByteArr, &roi); err != nil {
return err
}
或者实现自定义解组器:
func (r *RoI) UnmarshalJSON(b []byte) error {
type roi RoI
var obj struct {
RoI []roi
}
if err := json.Unmarshal(b, &obj); err != nil {
return err
}
*r = RoI(obj.RoI[0])
return nil
}
var fileobj struct {
// ...
RoI RoI `json:"roi"`
// ...
}
if err := json.Unmarshal(fileByteArr, &fileobj); err != nil {
panic(err)
}
roi := fileobj.RoI
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报