不能使用“ encoding / json”在Eagle(类型接口{})上进行范围调整

时间:2019-02-26 09:48:09

标签: json go

我有以下代码,我想覆盖所有元素或访问birds["eagle"["quote"][2]之类的一个元素,但我无法弄清楚

package main

import (
    "fmt"
    "encoding/json"
)

func main() {
    birdJson := `{"birds": {"pigeon": {"quotes": "love the pigeons"}, "eagle": {"quotes": ["bird of prey", "soar like an eagle", "eagle has no fear"]}}}`

    var result map[string]interface{}
    json.Unmarshal([]byte(birdJson), &result)
    birds := result["birds"].(map[string]interface{})

    fmt.Printf("%v\n",birds)
    eagle := birds["eagle"]

    for key, value := range eagle {
        fmt.Println(key, value.(string))
    }
}

The Go Playground

1 个答案:

答案 0 :(得分:1)

有几个问题:

eagle := birds["eagle"] //eagle is of type interface{}

因此将其投射到地图中:

eagle := birds["eagle"].(map[string]interface{})

现在您可以对其进行迭代:

for key, value := range eagle { 
        for _, e := range value.([]interface{}){
         fmt.Println(key, e.(string))
        }
    }

value还是这里的接口。因此,首先转换为[] interface {},然后转换为字符串。
这是完整的工作代码: https://play.golang.org/p/Bdnwit1wBYh