После этого урока Я пытаюсь прочитать файл JSON на Голанге.Он говорит, что есть два способа сделать это:
- разархивировать JSON, используя набор предопределенных структур
- , или разархивировать JSON, используя интерфейс map [string] {}
Поскольку у меня, вероятно, будет много разных форматов json, я предпочитаю интерпретировать их на лету.Итак, теперь у меня есть следующий код:
package main
import (
"fmt"
"os"
"io/ioutil"
"encoding/json"
)
func main() {
// Open our jsonFile
jsonFile, err := os.Open("users.json")
// if we os.Open returns an error then handle it
if err != nil {
fmt.Println(err)
}
fmt.Println("Successfully Opened users.json")
// defer the closing of our jsonFile so that we can parse it later on
defer jsonFile.Close()
byteValue, _ := ioutil.ReadAll(jsonFile)
var result map[string]interface{}
json.Unmarshal([]byte(byteValue), &result)
fmt.Println(result["users"])
fmt.Printf("%T\n", result["users"])
}
Это распечатывает:
Successfully Opened users.json
[map[type:Reader age:23 social:map[facebook:https://facebook.com twitter:https://twitter.com] name:Elliot] map[name:Fraser type:Author age:17 social:map[facebook:https://facebook.com twitter:https://twitter.com]]]
[]interface {}
На данный момент я не понимаю, как я могу прочитать возраст первого пользователя (23).Я попробовал несколько вариантов:
fmt.Println(result["users"][0])
fmt.Println(result["users"][0].age)
Но, по-видимому, type interface {} does not support indexing
.
Есть ли способ, которым я могу получить доступ к элементам в json, не определяя структуру?