将influxdb结果读入字符串会导致错误:interface {}是json.Number,而不是字符串

时间:2018-12-21 04:27:31

标签: go influxdb

我正在尝试将influxdb record(类型:[]interface{})转换为[]string,以便可以将其写入csv。

记录

  

[2018-12-20T07:26:23Z 90 123.2132 12.3232 30 1个用户]

代码

s := make([]string, len(record))
for i, v := range record {
    s[i] = v.(string)
}

但是我遇到了这个错误

  

接口{}是json.Number,不是字符串

我是golang的新手,对接口和json不太熟悉

1 个答案:

答案 0 :(得分:1)

我相信您的记录数组是由数据库驱动程序生成的:

record := make([]interface{}, 0, 10)
dec := json.NewDecoder(strings.NewReader(`["2018-12-20T07:26:23Z", 90, 123.2132, 12.3232, 30, 1, "user"]`))
dec.UseNumber()
dec.Decode(&record)

所有数字均生成为json.Number而不是float64。由于json.Number支持简单的字符串转换,因此您可以将该接口与简单的type switch一起使用:

s := make([]string, len(record))
for i, v := range record {
    switch val := v.(type) {
    case string:
        s[i] = val
    case json.Number:
        s[i] = val.String()
    default:
        panic(fmt.Sprintf("unhandled type: %T", v))
    }
}

查看实际操作: https://play.golang.org/p/jD_z94vQ7Wt