golang类型转换。 struct的接口

时间:2016-02-24 09:26:27

标签: json go unmarshalling

我不习惯golang

当我要求时,我得到了以下日志。

我想解析日志并存储到struct类型。

有人让我知道该怎么做?

提前致谢。

例如:

type ResultStruct struct{
    id int
    guid string
    name string
}

for k, v := range data {
    fmt.Print(v.id) fmt.Print(v.guid) fmt.Print(v.name)
}

[日志]

  

数据:[map [id:90001 guid:a name:test1] map [guid:b name:test2 id:90002] map [name:test3 id:90003 guid:c]]

[源]

response := httpClient.Do(request)
var data interface{}
rawdata, err := ioutil.ReadAll(response.body)
json.Unmarshal(rawdata, &data)
fmt.Println("data :", data)

2 个答案:

答案 0 :(得分:1)

对于新的Go程序员来说,这是一个常见的错误。

由于语言设计的原因,json.Unmarshal只能封送到exported字段。

只需将每个字段名称的首字母大写,即可将其导出。您可以选择添加字段标记来告诉json.Marshal要使用的键名。只有在您要使用json.Marshal时才需要这样做。

type ResultStruct struct{
    Id   int    `json:"id"`
    Guid string `json:"guid"`
    Name string `json:"name"`
}

引用encoding/json package

  

要将JSON解组为结构,Unmarshal匹配传入的对象   Marshal使用的键的键(结构字段名称或其字符串)   标签),更喜欢完全匹配,但也接受不区分大小写   比赛。 Unmarshal只会设置结构的导出字段。

答案 1 :(得分:0)

您正在使用encoding/json包解析数组,解组它。

type ResultStruct struct {
    id int      `json:"id"`
    guid string `json:"guid"`
    name string `json:"name"`
}
type Result struct {
    Data []ResultStruct `json:"data"`
}

response := httpClient.Do(request)
var data Result
decErr := json.NewDecoder(response.body).Decode(&data)
fmt.Println(decErr, data)

这应该将数据解组到数组中。