猿问

可以在 Go 中获取 JSON 的值

我是 Go 的新手。我正在尝试读取一个 JSON 文件并获取其中的一部分,然后使用获得的值进行操作。我的 JSON 在文件 example.json 中:


{"results":[{"statement_id":0,"series":[{"name":"cpu/node_utilization","columns":["time","distinct"],"values":[[10,1],[11,3],[13,5]]}]}]}

所以我想得到的是获取所有元素总和的“值”。在这种情况下:1+3+5


这是我的代码。我可以得到结果,但后来我没能得到系列。


这是我的代码:


package main


import (

    "encoding/json"

    "fmt"

    "io/ioutil"

    "os"

)


func main() {

    // Open our jsonFile

    jsonFile, err := os.Open("example.json")

    // if we os.Open returns an error then handle it

    if err != nil {

        fmt.Println(err)

    }

    fmt.Println("Successfully Opened example.json")

    // defer the closing of our jsonFile so that we can parse it later on

    defer jsonFile.Close()


    byteValue, _ := ioutil.ReadAll(jsonFile)

    var all_data map[string]interface{}

    json.Unmarshal([]byte(byteValue), &all_data)

    fmt.Println(all_data["results"])

}

我尝试过不同的解决方案,例如 all_data["results"].(map[string]interface{})["series"]) 但问题是地图在数组中,我不知道如何解决。


蓝山帝景
浏览 259回答 2
2回答

喵喔喔

使用界面和地图package mainimport (    "encoding/json"    "fmt")func main() {    byteValue := []byte(`{"results":[{"statement_id":0,"series":[{"name":"cpu/node_utilization","columns":["time","distinct"],"values":[[10,1],[11,3],[13,5]]}]}]}`)    var all_data map[string][]interface{}    json.Unmarshal([]byte(byteValue), &all_data)    fmt.Println("result:", all_data["results"])    for _, r := range all_data["results"] {        s := r.(map[string]interface{})        fmt.Println("series:", s["series"])        w := s["series"].([]interface{})        for _, x := range w {            y := x.(map[string]interface{})            fmt.Println(y)            z := y["values"].([]interface{})            fmt.Println("values:", z)            for _, v := range z {                u := v.([]interface{})                fmt.Println(u)                for _, i := range u {                    val := i.(float64)                    fmt.Println(val)                }            }        }    }}

慕妹3146593

我已经解决了定义结构的问题。package mainimport ("encoding/json""fmt""io/ioutil""os")type AutoGenerated struct {    Results []struct {        StatementID int `json:"statement_id"`        Series      []struct {            Name    string   `json:"name"`            Columns []string `json:"columns"`            Values  [][]int  `json:"values"`        } `json:"series"`    } `json:"results"`}func main() {    // Open our jsonFilejsonFile, err := os.Open("example.json")// if we os.Open returns an error then handle itif err != nil {    fmt.Println(err)}fmt.Println("Successfully Opened example.json")// defer the closing of our jsonFile so that we can parse it later ondefer jsonFile.Close()byteValue, _ := ioutil.ReadAll(jsonFile)all_data := AutoGenerated{}json.Unmarshal([]byte(byteValue), &all_data)fmt.Println(all_data.Results[0].Series[0].Values)}
随时随地看视频慕课网APP

相关分类

Go
我要回答