http://blog.golang.org/json-and-gom := j.(map[string]interface{}) 对我不起作用panic: interface conversion: interface {} is []interface {}, not map[string]interface {}所以我最终会用这样的代码来使它工作?不要认为这是正确的做法:) var j interface{} err = json.Unmarshal(b, &j) if err != nil { log.Print(err.Error()) } m := j.([]interface{}) //map[string]interface{} for k, v := range m { switch vv := v.(type) { case string: fmt.Println(k, "is string", vv) case int: fmt.Println(k, "is int", vv) case []interface{}: fmt.Println(k, "is an array:") for i, u := range vv { fmt.Println(i, u) } case map[string]interface{}: for k2, v2 := range v.(map[string]interface{}) { switch vv2 := v2.(type) { case string: fmt.Println(k2, "is string", vv2) case int: fmt.Println(k2, "is int", vv2) case []interface{}: fmt.Println(k2, "is an array:") for i2, u2 := range vv2 { fmt.Println(i2, u2) } default: fmt.Println(k2, "is of a type I don't know how to handle") } } default: fmt.Println(k, "is of a type I don't know how to handle") } }
1 回答
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
JSON 代码的根部分似乎是一个 JSON 数组(["item", "item", {"key": "value"}]符号)。尽管一些 JSON 库不喜欢它,但 JSON blob 的“根”可以是数组而不是对象({"key": "value"}符号)。
在生产应用程序中,您应该使用类型断言的第二个值来确保它是正确的类型:
m, mOk := j.(map[string]interface{})
s, sOk := j.([]interface{})
if mOk {
// Use Map
} else {
// Use Slice
}
如果您不需要编辑数据,Jason是一个很棒的 Go 库。
- 1 回答
- 0 关注
- 229 浏览
添加回答
举报
0/150
提交
取消