猿问

json 解组通用接口{}

http://blog.golang.org/json-and-go


m := 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")

        }

    }


小怪兽爱吃肉
浏览 230回答 1
1回答

繁星点点滴滴

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 库。
随时随地看视频慕课网APP

相关分类

Go
我要回答