не может простираться над орлом (тип интерфейса {}) с помощью «encoding / json» - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть следующий код, я хотел бы получить диапазон по всем элементам или получить доступ к одному элементу, например 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))
    }
}

Площадка для игр Go

1 Ответ

0 голосов
/ 26 февраля 2019

Существует несколько проблем:

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))
        }
    }

значение равноснова интерфейс здесь.Поэтому сначала приведите к [] interface {}, а затем к строке.
Вот полный рабочий код: https://play.golang.org/p/Bdnwit1wBYh

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...