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))
}
}
我正在尝试将 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))
}
}