dongshai2022
2017-03-24 18:05
采纳率: 100%
浏览 2.2k
已采纳

在Golang中将interface {}转换为struct

我是Go的新手,正努力了解所有不同的类型以及如何使用它们。 我有以下接口(最初在json文件中):
[map[item:electricity transform:{fuelType}] map[transform:{fuelType} item:gas]]

并且我有以下的结构:

type urlTransform struct {
        item string
        transform string
}

我不知道如何将接口数据放入结构中。 我敢肯定这确实很愚蠢,但是我会一直努力。 有任何的帮助都将不胜感激。

图片转代码服务由CSDN问答提供 功能建议

我是Go语言的新手,我试图让我了解所有不同的类型以及如何使用它们。 我有一个与以下接口(最初位于json文件中):

  [map [item:electricity transform:{fuelType}] map [transform:{fuelType}  item:gas]] 
   
 
 

,我有以下结构

  type urlTransform结构{
项目字符串 
转换字符串
} 
   
 
 

我不知道如何将接口数据放入结构中; 我敢肯定这真的很愚蠢,但是我整天都在努力。 任何帮助将不胜感激。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dongshou9878 2017-03-24 18:12
    已采纳

    Decode the JSON directly to types you want instead of decoding to an interface{}.

    Declare types that match the structure of your JSON data. Use structs for JSON objects and slices for JSON arrays:

    type transform struct {
        // not enough information in question to fill this in.
    }
    
    type urlTransform struct {
        Item string
        Transform transform
    }
    
    var transforms []urlTransform
    

    The field names must be exported (start with uppercase letter).

    Unmarshal the JSON to the declared value:

    err := json.Unmarshal(data, &transforms)
    

    or

    err := json.NewDecoder(reader).Decode(&transforms)
    
    打赏 评论
  • dongmou9260 2017-03-25 08:46

    From your response : [map[item:electricity transform:{fuelType}] map[transform:{fuelType} item:gas]]. As you can see here this is a an array that has map in it.

    One way to get the value from this is :

    values := yourResponse[0].(map[string]interface{}). // convert first index to map that has interface value.
    transform := urlTransform{}
    transform.Item = values["item"].(string) // convert the item value to string
    transform.Transform = values["transform"].(string)
    //and so on...
    

    as you can see from the code above I'm getting the the value using map. And convert the value to the appropriate type in this case is string.

    You can convert it to appropriate type like int or bool or other type. but this approach is painful as you need to get the value one bye one and assign it your your field struct.

    打赏 评论

相关推荐 更多相似问题