Reading influxdb result into string results in error: interface{} is json.Number, not string

Reading influxdb result into string results in error: interface{} is json.Number, not string

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

记录

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

代码

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

但是我遇到了这个错误

interface {} is json.Number, not string

我是 golang 的新手,对界面不太熟悉,json

我相信你的记录数组是由你的数据库驱动程序生成的,有点像这样:

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