package main
import (
"encoding/json"
"fmt"
"reflect"
"github.com/bitly/go-simplejson"
)
func main() {
s := `{"a":[1,2,3]}`
j, _ := simplejson.NewJson([]byte(s))
i := j.Get("a").Interface()
fmt.Printf("初始化arr 值%v 类型%T", i, i)
fmt.Printf("i的值是%v \n", i)
fmt.Printf("i反射的类型是 %v \n", reflect.TypeOf(i))
//通过断言,先转换成可以循环的[]interface{}
for _, elem := range i.([]interface{}) {
fmt.Printf("元素的值是%v,反射类型是%v, ", elem, reflect.TypeOf(elem))
val, err := elem.(json.Number).Float64()
if err != nil {
panic(err)
}
fmt.Printf("转换为浮点数后,值%v 类型%T \n", val, val)
}
}
/*
初始化arr 值[1 2 3] 类型[]interface {}i的值是[1 2 3]
i反射的类型是 []interface {}
元素的值是1,反射类型是json.Number, 转换为浮点数后,值1 类型float64
元素的值是2,反射类型是json.Number, 转换为浮点数后,值2 类型float64
元素的值是3,反射类型是json.Number, 转换为浮点数后,值3 类型float64
*/
因为我这个数组是从json转回来的,所以是json.Number类型的元素.具体你的数据还要看情况进行转换的.
下边json.Number定义
// A Number represents a JSON number literal.
type Number string
// String returns the literal text of the number.
func (n Number) String() string { return string(n) }
// Float64 returns the number as a float64.
func (n Number) Float64() (float64, error) {
return strconv.ParseFloat(string(n), 64)
}
// Int64 returns the number as an int64.
func (n Number) Int64() (int64, error) {
return strconv.ParseInt(string(n), 10, 64)
}